Python进程间通信,获取从另一个Python进程启动的独立进程的pid
我遇到了一个看起来应该很简单的问题。顺便说一下,我已经在使用 multiprocessing
模块,所以不太想用 subprocess
模块。总之,我有一个 Python 程序 foo.py
,它通过 os.system()
函数启动另一个 Python 程序 bar.py
。
os.system("start python bar.py")
由于其他复杂的原因,我必须这样做,而不是启动某种子进程。问题是,我想知道 bar.py
的进程 ID(pid)。有没有什么优雅或高效的方法来做到这一点?目前,我是让 bar.py
将它的 pid 写入一个临时文件,然后让 foo.py
去读取这个文件,但我觉得应该有更好的办法。
顺便提一下,显然 bar.py
很容易知道 foo.py
的 pid,因为 foo.py
可以通过 os.system
将它作为命令行参数传递。
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