我有一个问题,觉得它应该很简单。顺便说一句,我已经在使用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