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

如何在subprocess.check_output运行过程中同步执行其他任务?

解决方案

subprocess.check_output属于阻塞调用,执行后会一直等待子进程运行结束才会返回结果,因此你原有代码中的while循环无法在ping命令运行期间生效——等ping变量完成赋值时,ping命令已经执行完毕了。

你可以改用非阻塞的subprocess.Popen启动子进程,通过轮询子进程状态实现运行中提示,实现代码如下:

import subprocess
import time

# 用Popen启动子进程,不会阻塞主进程
p = subprocess.Popen("ping -n 10 www.google.com.", shell=True, 
                     stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 
                     universal_newlines=True)

# 轮询子进程状态
while p.poll() is None: # poll返回None说明子进程仍在运行
    print("ping is still running")
    time.sleep(1) # 控制打印频率,避免占用过多CPU

# 子进程结束后获取执行输出
ping = p.communicate()[0]
print(ping)

关键逻辑说明

  • Popen启动子进程后主程序会继续往下执行,不会等待子进程结束
  • p.poll()用于获取子进程的退出状态,子进程运行中返回None,运行结束后返回退出码
  • time.sleep(1)可根据需要调整,修改提示信息的打印间隔
  • p.communicate()会读取子进程的所有输出内容,效果和你原代码中的check_output一致,如果需要判断命令是否执行成功,可以检查p.returncode的值,非0代表命令执行出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:39:00