我試圖創建一個程序(它將在Windows上使用)來壓縮7-Zip和其他東西的文件列表。防止關閉通過子進程打開的DOS shell窗口
我使用subprocess
以正確的參數運行7-Zip可執行文件。 subprocess
用7z.exe
輸出打開DOS shell;這很好,因爲有一個百分比文件壓縮指標,有時這個過程可能會很長。我的問題是,用戶將能夠-自願或意外,中斷在DOS窗口的關閉按鈕壓縮任務,或者通過
- 點擊,或
- 按Ctrl鍵 - Ç 。
是否可以禁用從subprocess
打開的任何類型的輸入到DOS shell?另外,如何在運行時將DOS外殼的輸出傳遞給我的程序?我嘗試了process.stdout.read(1024)
和process.communicate()
,但是在子進程結束時都讀取輸出;不是在運行時。
我已經使用subprocess.Popen()
而不是subprocess.call()
,這樣我可以同時運行所有7-Zip任務,但是如果能夠幫助解決我的問題,我可以改變它。
for f in self.fileList:
destination = self.newPath + "\\" + basename(f) + ".7z"
arglist = [self.sevZipPath, "a", "-mx9", destination, f]
sp = subprocess.Popen(
args = arglist,
cwd = self.newPath,
shell = False
)
不幸的是,這在我的情況下不起作用,因爲據我瞭解,我發現讀取標準輸出的所有函數都要等到子進程結束。這意味着所有的應用程序都會凍結,直到子進程結束,並且只有當它結束時,我才能打印所有輸出到目標文件。 – BigDie
你嘗試過'sp.stdout.read(1)'? – lqs