Python 子进程在Windows上的pid错误
main.py:Python 子进程在Windows上的pid错误,python,subprocess,python-3.7,Python,Subprocess,Python 3.7,main.py: from subprocess import Popen import sys proc = Popen([sys.executable, 'sub.py']) print('parent thinks subprocess pid is', proc.pid) sub.py: import os print('subprocess thinks its pid is', os.getpid()) Linux上python main.py的输出: parent think
from subprocess import Popen
import sys
proc = Popen([sys.executable, 'sub.py'])
print('parent thinks subprocess pid is', proc.pid)
sub.py:
import os
print('subprocess thinks its pid is', os.getpid())
Linux上python main.py的输出:
parent thinks subprocess pid is 338
subprocess thinks its pid is 338
Windows上的输出:
parent thinks subprocess pid is 17340
subprocess thinks its pid is 7308
为什么会这样
编辑:
print(sys.executable)
给出C:\my venv\Scripts\python.exe
在windows上创建虚拟环境时,复制到venv脚本文件夹的python解释器似乎不是实际的python可执行文件,而是执行它的包装器
如果将sub.py修改为如下内容:
导入操作系统
导入psutil
local_pid=os.getpid()
parent=psutil.Process(local_pid).parent()
print('子进程认为其pid为',os.getpid())
尝试:
print(“我们主要python的父进程是”,parent.pid)
除:
通过
您将看到os.getpid()将返回自己的pid,但在virtual env中执行时,它有一个父级。但是,当禁用venv时,main和sub.py会报告相同的pid。在Windows测试中,什么是
sys.executable
?C:\my venv\Scripts\python.exe(与main.py和sub.py的输出相同)@Chris应该进入您的问题本身,而不是注释这可能是子流程启动另一个子流程的情况,虽然我对Windows Python启动器了解不够,不知道为什么会发生这种情况。@user2357112supportsMonica-我也在想同样的事情,比如说其中涉及到某种包装器脚本。虽然…如果是Linux,那么这两个数字不是很接近吗?我通常对Windows了解不多,也许它在Windows上不起作用。