Python循环中调用外部程序仅执行一次的问题排查
解决Python循环中调用外部程序只运行一次的问题
嘿,我一眼就看出问题出在哪了——你用的subprocess.run()默认是阻塞模式的!也就是说,每次调用它打开记事本后,Python主进程会一直等着记事本关掉,才会继续执行循环里的下一次调用。所以不是程序只运行了一次,而是你得关掉当前打开的记事本,下一个才会弹出来,看起来就像只跑了一次。
要实现一次性打开指定次数的记事本(不用等上一个关掉),你得让外部程序在后台独立运行,别阻塞主进程。这里给你两种靠谱的解决方法:
方法1:借助Windows的start命令
通过start命令启动程序,它会直接让程序后台运行,不会卡住主进程。记得加上shell=True参数来让系统解析这个命令:
import subprocess z = int(input()) def run(): # 用start命令让记事本后台启动,不阻塞主进程 subprocess.run('start notepad.exe', shell=True) a = 0 while(a < z): a = a + 1 run()
方法2:使用subprocess的creationflags参数
这是更推荐的方式,不用依赖shell,直接通过subprocess的参数创建独立的子进程:
import subprocess z = int(input()) def run(): # 创建新控制台窗口运行记事本,主进程无需等待 subprocess.run('notepad.exe', creationflags=subprocess.CREATE_NEW_CONSOLE) a = 0 while(a < z): a = a + 1 run()
现在你输入5的话,会一次性弹出5个记事本,完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者Rocket
相关产品推荐
相关产品推荐

