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)谢谢,这解决了我的问题!尽管有两件事:1
shell=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)谢谢,这解决了我的问题!尽管有两件事:1
shell=True
对我不起作用。也许它只在Linux上工作?2.它不是
creationFlags
,而是
creationFlags
。再次感谢马肯!也许可以编辑您的帖子,将
creationFlags
更改为
creationFlags
,以防其他人阅读此文章?Ops!然而,这很奇怪,因为如果您阅读文档,它会说:“当使用shell=True创建Popen时,始终设置此标志。”。。嗯,不过我很高兴它对你有用:)