subprocess.Popen() 不会 运行 python 脚本,找不到 python 命令
subprocess.Popen() won't run python script, python command not found
我正在尝试让 subprocess.Popen 到 运行 一个 python 脚本,但我不断收到以下错误:/bin/sh: python: command not found
。该脚本将 yaml 文件作为参数。我在有和没有 shell=True
的情况下都尝试过这条线。当我在 Linux 终端中使用 python 命令 运行 时,脚本 运行 没问题。我做错了什么?
process = subprocess.Popen(
['python', PATH_TO_PYTHON_SCRIPT, PATH_TO_CONFIG_FILE],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE, shell=True)
with process.stdout, open(processing_log, 'ab') as f_in:
for line in iter(process.stdout.readline, b''):
f_in.write(line)
如果您想 运行 使用与您当前 运行 相同的解释器,我建议传递 sys.executable
而不是 'python'
这样您不依赖于变幻莫测的 PATH
查找;如果您想从 PATH
中查找它,您可以尝试 using shutil.which
在 Python 层中查找它以尽量减少路上的东西数量。
旁注:您为什么 运行 将此与 shell=True
结合?这增加了一些您可能应该避免的复杂因素,而且您也没有利用它提供的微小好处。
此外,如果您只想将输出附加到给定文件,您可以随时这样做:
with open(processing_log, 'ab') as f_out:
process = subprocess.Popen(
['python', PATH_TO_PYTHON_SCRIPT, PATH_TO_CONFIG_FILE],
stdout=f_out,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
并让进程直接写入文件,而不是充当直通层。
我正在尝试让 subprocess.Popen 到 运行 一个 python 脚本,但我不断收到以下错误:/bin/sh: python: command not found
。该脚本将 yaml 文件作为参数。我在有和没有 shell=True
的情况下都尝试过这条线。当我在 Linux 终端中使用 python 命令 运行 时,脚本 运行 没问题。我做错了什么?
process = subprocess.Popen(
['python', PATH_TO_PYTHON_SCRIPT, PATH_TO_CONFIG_FILE],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE, shell=True)
with process.stdout, open(processing_log, 'ab') as f_in:
for line in iter(process.stdout.readline, b''):
f_in.write(line)
如果您想 运行 使用与您当前 运行 相同的解释器,我建议传递 sys.executable
而不是 'python'
这样您不依赖于变幻莫测的 PATH
查找;如果您想从 PATH
中查找它,您可以尝试 using shutil.which
在 Python 层中查找它以尽量减少路上的东西数量。
旁注:您为什么 运行 将此与 shell=True
结合?这增加了一些您可能应该避免的复杂因素,而且您也没有利用它提供的微小好处。
此外,如果您只想将输出附加到给定文件,您可以随时这样做:
with open(processing_log, 'ab') as f_out:
process = subprocess.Popen(
['python', PATH_TO_PYTHON_SCRIPT, PATH_TO_CONFIG_FILE],
stdout=f_out,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
并让进程直接写入文件,而不是充当直通层。