Python进程间通信,从另一个Python进程开始获取独立进程(不是子进程)的pid
我有一个问题,感觉应该很简单。作为旁注,我已经在使用Python进程间通信,从另一个Python进程开始获取独立进程(不是子进程)的pid,python,process,communication,pid,Python,Process,Communication,Pid,我有一个问题,感觉应该很简单。作为旁注,我已经在使用多处理模块,所以我有点不愿意使用子流程模块。无论如何,我有一个Python程序,foo.py,它通过os.system()函数启动另一个Python程序bar.py os.system("start python bar.py") 出于其他复杂的原因,这必须以这种方式完成,而不是启动某种子进程。问题是,我想知道bar.py的pid。最优雅或有效的方法是什么?目前,我正在通过使用bar.py将其pid写入一个临时文件以供foo.py读取来解决这
多处理
模块,所以我有点不愿意使用子流程
模块。无论如何,我有一个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
多处理!=子流程
您仍然可以在多处理中使用subprocess,而不是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
多处理!=子流程 您仍然可以在多处理中使用subprocess,而不是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
我知道,
多处理
!=<代码>子流程,这正是我要说的。考虑到我使用的是多处理
,我不愿意使用子流程
。你能扩展一下“键入.pid
”和Popen
”吗?我以前从未使用过子流程
。谢谢Markon。似乎os.system()
和subprocess.Popen()
之间的区别如下。我的问题中显示的命令将打开一个新的命令提示窗口(在Windows中),并在该新窗口中运行bar.py
,这正是我所需要的。您的process=subprocess.Popen(args)
命令将在同一窗口中运行bar.py
。如何使用子流程在单独的窗口中运行bar.py
?在Popen构造函数内设置creationFlags=subprocess.CREATE_NEW_控制台。(您也可以使用shell=True)谢谢,这解决了我的问题!尽管有两件事:1shell=True
对我不起作用。也许它只在Linux上工作?2.它不是creationFlags
,而是creationFlags
。再次感谢马肯!也许可以编辑您的帖子,将creationFlags
更改为creationFlags
,以防其他人阅读此文章?Ops!然而,这很奇怪,因为如果您阅读文档,它会说:“当使用shell=True创建Popen时,始终设置此标志。”。。嗯,不过我很高兴它对你有用:)我知道多处理
!=<代码>子流程,这正是我要说的。考虑到我使用的是多处理
,我不愿意使用子流程
。你能扩展一下“键入.pid
”和Popen
”吗?我以前从未使用过子流程
。谢谢Markon。似乎os.system()
和subprocess.Popen()
之间的区别如下。我的问题中显示的命令将打开一个新的命令提示窗口(在Windows中),并在该新窗口中运行bar.py
,这正是我所需要的。您的process=subprocess.Popen(args)
命令将在同一窗口中运行bar.py
。如何使用子流程在单独的窗口中运行bar.py
?在Popen构造函数内设置creationFlags=subprocess.CREATE_NEW_控制台。(您也可以使用shell=True)谢谢,这解决了我的问题!尽管有两件事:1shell=True
对我不起作用。也许它只在Linux上工作?2.它不是creationFlags
,而是creationFlags
。再次感谢马肯!也许可以编辑您的帖子,将creationFlags
更改为creationFlags
,以防其他人阅读此文章?Ops!然而,这很奇怪,因为如果您阅读文档,它会说:“当使用shell=True创建Popen时,始终设置此标志。”。。嗯,不过我很高兴它对你有用:)