Python进程间通信,从另一个Python进程开始获取独立进程(非子进程)的pid



我有一个问题,觉得它应该很简单。顺便说一句,我已经在使用multiprocessing模块,所以我有点不愿意使用subprocess模块。不管怎样,我有一个Python程序foo.py,它通过os.system()函数启动另一个Python程序bar.py

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

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

顺便说一句,显然bar.py很容易知道foo.py的pid,因为foo.py可以使用os.system将其作为命令行参数传入。

多处理!=子流程

您仍然可以在多处理中使用子进程,而不是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

最新更新