我正在尝试创建一个程序(它将在 Windows 上使用)来压缩具有 7-Zip 和其他内容的文件列表。
我使用subprocess
正确的参数运行 7-Zip 可执行文件。
subprocess
打开带有7z.exe
输出的 DOS shell;这很好,因为有一个文件压缩百分比指标,有时这个过程可能很长。我的问题是用户将能够(自愿或意外)通过以下方式中断压缩任务
- 单击 DOS 窗口的关闭按钮,或
- 按Ctrl- C。
是否可以禁用从打开的 DOS shell 的任何类型的输入subprocess
?或者,如何在运行时将 DOS shell 的输出传递给我的程序?我尝试使用process.stdout.read(1024)
and 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
)