0

我有一个感觉应该很简单的问题。作为旁注,我已经在使用该multiprocessing模块,所以我有点不愿意使用该subprocess模块。无论如何,我有一个 Python 程序,它通过该函数foo.py启动另一个 Python 程序。bar.pyos.system()

os.system("start python bar.py")

由于其他复杂的原因,这必须以这种方式完成,而不是启动某种子进程。问题是,我想知道bar.py. 最优雅或最有效的方法是什么?目前,我通过bar.py将其 pid 写入临时文件以foo.py供读取来解决此问题,但我觉得必须有更好的方法。

顺便说一句,显然很容易bar.py知道 的 pid foo.py,因为foo.py可以使用os.system.

4

1 回答 1

3

多处理!=子进程

您仍然可以在多处理中使用子进程,而不是 os.system('...') 并通过在 Popen 对象上键入“.pid”来获得所需的内容。

正如您在此处看到的,子进程可以(并且您应该使用它!)替换 os.system。

在您的情况下,您需要进程 ID,因此您可以创建一个 Popen 对象,就像在此处找到的示例中一样。然后让我们写几行代码:

import subprocess
args = ['/path/to/python', 'bar.py']
process = subprocess.Popen(args, shell=True, creationflags=subprocess.CREATE_NEW_CONSOLE) # you can also set only shell=True
print process.pid
于 2013-02-21T14:08:16.280 回答