我尝试在同一shell中的Windows中运行简单脚本。 我跑的时候
subprocess.call(["python.exe", "a.py"], shell=False)
工作正常。
但是当我跑步时
subprocess.Popen(["python.exe", "a.py"], shell=False)
它打开了新的shell,而shell = false没有任何影响。
a.py只是在屏幕上打印消息。
答案 0 :(得分:0)
首先使用Popen
调用shell=False
并不意味着底层python不会尝试打开窗口/控制台。只是当前的python实例直接执行python.exe
而不是系统shell(cmd或sh)。
其次,Popen
会返回该流程的句柄,您必须在此句柄上执行wait()
才能正常结束,或者您可以生成一个已解散的流程(具体取决于您的平台)重新开始)。我建议你试试
p = subprocess.Popen(["python.exe", "a.py"], shell=False)
return_code = p.wait()
等待进程终止并获取返回代码。
请注意,Popen
是在后台运行进程的一种非常糟糕的方法。最好的方法是使用单独的线程
import subprocess
import threading
def run_it():
subprocess.call(["python.exe", "a.py"], shell=False)
t = threading.Thread(target=run_it)
t.start()
# do your stuff
# in the end
t.join()