Python进程间通信,获取从另一个Python进程启动的独立进程的pid

0 投票
1 回答
1201 浏览
提问于 2025-04-17 16:38

我遇到了一个看起来应该很简单的问题。顺便说一下,我已经在使用 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

撰写回答