python - 从 python 运行代码与从 bash 运行代码有不同的权限?

标签 python linux bash permissions exec

第一步

$ sudo adduser foo_user
$ mkdir /tmp/foo-user && chown foo_user:foo_user $_
$ sudo npm install -g less  # Install Node.js and NPM for this
$ echo ".box {color: red}" | sudo -u foo_user tee /tmp/foo-user/main.less

python

$ sudo -u foo_user python -c "from subprocess import check_output, STDOUT;
                              print check_output(['/usr/local/bin/lessc',
                                                  '/var/lib/nginx/body/main.less'],
                                                  stderr=STDOUT, shell=True);"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['/usr/local/bin/lessc', '/tmp/foo-user/main.less']' returned non-zero exit status 1

bash

$ sudo -u foo_user /usr/local/bin/lessc /tmp/foo-user/main.less >NULL && echo $?
0

最佳答案

对于 shell=True,您必须使用字符串,而不是参数列表。这可能会导致您的问题(可能不是权限问题 — 事实上,您只知道 lessc1 退出并且不是原因)。

此外,在 Python 中,您可以运行命令。在 Bash 中,您运行命令并将标准输出重定向到一个名为 NULL 的文件(您是说 /dev/null 吗?)。

关于python - 从 python 运行代码与从 bash 运行代码有不同的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23853251/

相关文章:

linux - 使用 sh 运行 bash 脚本

linux - 如何检查用户指定的名称是否引用目录?

python - 统一文本和图像分类 (Python)

java - 从 Jython 中引用 M2Crypto

python - 在 get_queryset 中添加新的上下文变量

python - 永久更改目录 python 脚本/python 脚本在什么环境中运行?

python - 如何在Python中从JSON中删除括号?

linux - Linux 中包含多版本库导致的版本冲突如何解决

bash - 将单列文件转换为多列

linux - 等待 bash 启动的进程结束并获取其 PID