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
相关产品推荐
相关产品推荐

