You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统中如何获取subprocess启动的Python子进程PID

解决方法

问题根源

  1. 进程名显示逻辑差异:Linux系统下使用ps等命令查询进程时,默认会展示完整启动命令,因此可以直接匹配到test.py;而Windows系统中所有Python脚本的进程映像名都为python.exe,脚本名仅作为启动参数存在,默认tasklist /v命令无法匹配参数内容,因此搜索返回空结果。
  2. 方法使用问题:你当前使用的subprocess.run()是同步阻塞接口,会等待子进程完全运行结束后才返回结果,在test.py运行的10秒中该接口还未返回,无法直接拿到子进程信息。

方案1:直接在Python代码中获取子进程PID

将subprocess.run替换为非阻塞的subprocess.Popen,即可直接读取子进程PID,修改后的app.py示例:

#!/usr/bin/env python3
import subprocess

command = "python"
filename = "test.py"

args = [command, filename]
# 使用Popen非阻塞启动子进程
p = subprocess.Popen(args)
# 直接获取子进程PID,就是test.py对应的Python进程PID
print(f"test.py对应的进程PID为:{p.pid}")

# 可选:等待子进程运行结束,和原有run逻辑保持一致
p.wait()

如果系统中Python解释器的启动命令为python3,将command变量对应修改即可。

方案2:在Windows系统命令行中查询test.py对应的PID

使用wmic命令查询Python进程的完整启动参数,即可匹配到test.py对应的PID,命令如下:

wmic process where "name='python.exe'" get processid,commandline

返回结果中会列出所有python进程的命令行和PID,找到命令行中包含test.py的条目,对应的PID就是目标进程ID。


内容的提问来源于stack exchange,提问作者Bhimasen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:00