我嘗試在同一個shell中的Windows中運行簡單的腳本。 當我運行時subprocess.Popen無法與shell = False
subprocess.call(["python.exe", "a.py"], shell=False)
它工作正常。
但是當我運行
subprocess.Popen(["python.exe", "a.py"], shell=False)
它打開新的外殼,外殼=假沒有影響。
a.py只是將消息打印到屏幕上。
我嘗試在同一個shell中的Windows中運行簡單的腳本。 當我運行時subprocess.Popen無法與shell = False
subprocess.call(["python.exe", "a.py"], shell=False)
它工作正常。
但是當我運行
subprocess.Popen(["python.exe", "a.py"], shell=False)
它打開新的外殼,外殼=假沒有影響。
a.py只是將消息打印到屏幕上。
首先調用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()
的可能的複製[Python的:子調用與SHELL =假不工作(http://stackoverflow.com/questions/25465700/python-subprocess-call- with-shell-false-not-working) –