我試圖在Windows中運行Python中的Robocopy
命令(但我對任何子進程感到好奇)。該代碼非常簡單,運行良好。它是:如何殺死在線程中啓動的子進程?
def copy():
with Popen(['Robocopy', media_path, destination_path, '/E', '/mir', '/TEE', '/log+:' + log_path], stdout=PIPE, bufsize=1, universal_newlines=True) as Robocopy:
Robocopy.wait()
returncode = Robocopy.returncode
另外,我有以下運行它在一個單獨的線程:
threading.Thread(target=copy, args=(media_path, destination_path, log_path,), daemon=True)
不過,也有某些情況下,我想停止robocopy
(類似於關閉CMD
窗口如果它是從命令行運行)
有沒有一種很好的方法在Python中做到這一點?
不相關:除非從管道讀取,否則不要使用'stdout = PIPE'。如果你不使用'stdout = PIPE',你可以放棄'bufsize','universal_newlines'參數。 – jfs
@ J.F.Sebastian,3.3+也有'subprocess.DEVNULL',這比打開'os.devnull'簡單一點。使用'nul'可擴展與'DETACHED_PROCESS'標誌一起工作的控制檯程序的範圍,而不需要管道。具體來說,如果程序需要有效的標準句柄,則會有幫助 – eryksun