Python3.11如何让subprocess.run()无需等待浏览器关闭就执行后续命令?
解决Python 3.11中subprocess.run等待浏览器关闭才执行后续命令的问题
问题原因
Edge、Chrome、Firefox这类浏览器的启动机制可能发生了更新,启动程序不再立即退出,而是与主浏览器进程保持关联;同时subprocess.run()默认会等待子进程终止,os.system()本身属于阻塞调用,因此出现必须关闭浏览器才会执行后续代码的情况。
解决方案
1. 使用subprocess.Popen(推荐)
Popen是异步启动子进程的方式,不会等待进程结束,可直接执行后续代码:
import subprocess edge = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" subprocess.Popen(edge.split()) print('next command')
2. 借助Windows的start命令配合subprocess.run
通过shell=True调用Windows的start命令,让浏览器在独立进程启动,避免阻塞:
import subprocess edge = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" # start命令需要空的标题参数"",避免路径含空格时出错 subprocess.run(f'start "" "{edge}"', shell=True) print('next command')
3. 设置进程创建标志
通过creationflags参数创建新进程组,让subprocess.run无需等待子进程终止:
import subprocess edge = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" subprocess.run(edge.split(), creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) print('next command')
内容的提问来源于stack exchange,提问作者Dave Carlee
相关产品推荐
相关产品推荐

