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

Python中如何等待os命令执行完毕后再继续程序运行?

等待Shell脚本执行完成后再继续Python程序执行?

你用os.popen('sh download.sh')的问题在于,这个方法会启动子进程运行脚本,但不会主动等待子进程结束,Python代码会直接继续往下执行。要实现等待脚本完成后再继续,有两种可行的方式:

推荐方案:使用subprocess模块

os.popen已经被官方标记为弃用,推荐用更安全、功能更完善的subprocess模块。其中subprocess.run()方法默认会阻塞当前Python进程,直到子进程(也就是你的download.sh脚本)执行完成:

import subprocess
# 执行脚本并等待其完成
subprocess.run(['sh', 'download.sh'], check=True)
# 下面的代码会在download.sh完全执行完毕后才运行

加check=True的好处是,如果download.sh执行出错(返回非0状态码),Python会直接抛出CalledProcessError异常,方便你排查脚本执行中的问题。

兼容方案:基于os.popen的等待方式

如果一定要沿用os.popen,可以通过读取它返回的文件对象直到EOF,这会强制Python等待子进程结束:

import os
proc = os.popen('sh download.sh')
# 读取脚本的所有输出,直到子进程终止
proc.read()
# 后续代码会在脚本完成后执行

不过这种方式不推荐,因为它无法方便地获取脚本的执行状态码,也没有subprocess的安全机制。

额外注意

如果你的download.sh脚本里的curl命令是后台运行的(比如加了&),那即使等待脚本执行结束,curl进程可能还在后台下载文件。这种情况下需要修改download.sh,确保所有curl都是前台执行,没有后台运行的配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:03:09