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)

并让进程直接写入文件,而不是充当直通层。