Python 3.4 子流程

Python 3.4 subprocess

以下在 Python 2.7 中有效,我相信这就是我使用的。我目前正在尝试将所有内容更新到 Python 3.4,但这根本不起作用。当我 运行 程序时,它只是停止并且不会出现 运行 我要求它 运行 的任何进程。我希望它同时多次 运行 某个进程(子进程将自身更新为一个新值,因此它不会每次都尝试做同样的事情)。我做错了什么?

#!/usr/bin/ python3.4
import sys
import subprocess
procs=[]
for i in range(3):
    proc=subprocess.Popen(['python','test.py'])
    procs.append(proc)


for proc in procs:
    proc.wait()

我刚试过:

#!/usr/bin/python3.4
import sys
import subprocess
procs=[]
for i in range(3):
    print ('hello')
    proc=subprocess.Popen(['python','test.py'])
    print ('hi')
    procs.append(proc)
    print ('goodbye')

for proc in procs:
    proc.wait()

它打印出三个 hello, hi, goodbye 很好,但我写得很快:

#!/usr/bin/python3.4
print('hello')

对于 test.py 而它根本 运行 没有那个程序。

问题可能是由于您为子进程调用 python 的方式所致。当解释器被显式调用为 python script.py 时,"hashbang" 将被忽略,解释器将为 python。根据您的系统,可能是 Python.

的不同版本

在您的代码中 Popen(['python','test.py']) 明确使用 python 作为解释器。 如果 你有不同版本的解释器,例如Python 2.7,作为默认解释器,那将是 运行,而不是您希望的 Python 3.4。

反过来,如果您的子进程脚本不能 运行 正确地使用 Python 2.7,如果您使用 tkinter 很可能就是这种情况,那么您可能有你遇到的问题。

如果这是问题所在,您可以通过明确使用正确的解释器来解决它,例如

Popen(['python3.4','test.py'])

或者您可以依靠 hashbang 调用正确的解释器:

Popen(['/path/to/test.py'])

如果脚本文件具有可执行权限,这应该可以工作。