Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子进程在Windows上的pid错误_Python_Subprocess_Python 3.7 - Fatal编程技术网

Python 子进程在Windows上的pid错误

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

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 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上不起作用。