【问题标题】:Why does this python code tell me permission is denied?为什么这个 python 代码告诉我权限被拒绝?
【发布时间】:2018-04-06 00:03:18
【问题描述】:
import subprocess
subprocess.call(" python script2.py 1", shell=True)

此代码不起作用。它告诉我在 python 上的权限被拒绝。有什么修复吗?

【问题讨论】:

  • 检查script2.py文件的权限
  • 你能提供完整的错误吗?如果那里还有一些其他信息,您到目前为止还没有包括在内。还要说明您在哪个操作系统上运行它以及script2.py 的文件权限。在 linux 上你会使用ls -l script2.py。还有一件事,把开头的空格去掉怎么样?

标签: python subprocess


【解决方案1】:

使用 Subprocess.call() 的建议

什么时候 shell=True 是危险的?

如果我们执行的 shell 命令可能包含来自不受信任的来源的未经处理的输入,它会使程序容易受到 shell 注入的攻击,这是一个严重的安全漏洞,可能导致任意命令执行。因此,在命令字符串是从外部输入构造的情况下,强烈建议不要使用 shell=True

参考:When to use Shell=True for Python subprocess module

import subprocess
subprocess.call(" python script2.py 1", shell=True)

尽量避免 shell=True 在子进程中。而是使用

import subprocess
subprocess.call(['python','script2.py','1'])

将所有内容作为列表传递,避免 shell=True

import subprocess
subprocess.call('python script2.py 1'.split())

'python script2.py 1'.split() 将创建一个类似 ['python','script2.py', '1'] 的列表

解决权限问题

为您的脚本添加执行权限。

chmod +x script2.py

【讨论】:

【解决方案2】:

我不知道您是否在 bash 终端中执行此操作,但如果您是,您必须授予自己对 .py 文件的权限。所以输入这个

chmod +x script2.py

然后终端会给你权限

【讨论】:

  • 我认为,如果您直接执行python文件(即它通过shebang找到python二进制文件),您只需要执行权限。如果您通过自己调用解释器来执行它,则不需要执行权限。这个问题更可能是 OP 尚未告诉我们的问题,例如执行脚本的目录或读取权限。
猜你喜欢
  • 2011-03-29
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 2020-09-12
相关资源
最近更新 更多