You need to enable JavaScript to run this app. Python中如何调用系统命令后无需等待即可继续执行代码
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何调用系统命令后无需等待即可继续执行代码

Python实现非阻塞执行系统命令的方案

os.system默认是同步阻塞接口,调用后会等待系统命令执行完成才会返回,要实现非阻塞执行可以使用以下几种方案:

方案1:使用subprocess模块(全平台通用,官方推荐)

subprocess是Python标准库中专门用于进程管理的模块,Popen接口创建子进程后会直接返回,不会阻塞主进程的后续执行:

  • 基础用法示例:
import subprocess

# 命令拆分为列表形式,不需要shell解析,安全性更高
subprocess.Popen(["ping", "baidu.com", "-c", "100"])

# 需要用到shell语法(管道、通配符、环境变量解析等)时可加shell=True参数
subprocess.Popen("ping baidu.com -c 100 > ping_log.txt", shell=True)

注意不要主动调用Popen返回对象的.wait()、.communicate()方法,否则会重新进入阻塞等待状态。

安全提示:如果命令内容包含外部用户可控的输入,不要使用shell=True参数,避免出现命令注入漏洞。

方案2:类Unix系统下使用后台运行标记

如果是运行在Linux、macOS等类Unix系统环境下,也可以直接在命令末尾加&标记,让系统直接把命令放到后台运行,此时os.system也会直接返回不会阻塞:

import os
os.system("ping baidu.com -c 100 > ping_log.txt &")

该方案仅适配类Unix环境,Windows系统原生命令行不支持&后台标记,兼容性较差。

方案3:多线程/多进程封装阻塞调用

如果需要对任务的运行状态做自定义管控,也可以把阻塞的os.system调用放到独立的线程/子进程中运行,避免阻塞主进程逻辑:

import os
import threading

def run_system_cmd(cmd):
    os.system(cmd)

# 启动独立线程执行命令,daemon=True表示线程会随主进程退出自动终止
threading.Thread(target=run_system_cmd, args=("ping baidu.com -c 100",), daemon=True).start()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 11:15:05