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

Python如何检测被调用脚本内部启动的子进程是否已运行结束

实现方案

下面是三种不需要强制导入脚本B即可实现需求的思路,可根据实际场景选择:

方案1:PID轮询检测

  • 脚本B启动耗时subprocess后,直接将子进程的pid属性打印到标准输出
  • 脚本A调用脚本B时捕获标准输出内容,拿到子进程的PID值
  • 借助psutil库调用psutil.Process(目标PID).is_running()轮询进程存活状态,轮询间隔建议设置为0.5~1s降低资源占用
  • 轮询过程中GUI标签保持显示processing...,检测到进程退出后更新标签内容即可

注意:如果担心PID被系统复用导致误判,可以额外校验进程的启动命令、名称字段是否匹配目标子进程


方案2:标记文件同步状态(实现最简单)

  • 脚本B启动子进程后,在双方都能访问的公共目录下创建一个临时标记文件(比如running_flag.tmp),子进程执行结束后立即删除该文件
  • 脚本A只需轮询该标记文件是否存在,文件存在时保持processing...显示,文件消失即代表子进程运行完成

该方案无额外依赖,也不需要调整两个脚本的导入关系,适合快速落地需求


方案3:修复导入问题直接获取进程对象

你之前导入脚本B失败大概率是因为脚本B的存储目录不在Python的默认模块搜索路径中,可以在导入前手动添加路径:

# 脚本A开头添加以下代码
import sys
import os
# 替换为脚本B实际所在的文件夹路径
sys.path.append(os.path.abspath("/path/to/directory/of/B"))
# 之后即可正常导入B中的变量或函数
from B import long_process_p
# 直接用poll()检测状态即可
while long_process_p.poll() is None:
    # 保持processing显示的逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:54:02