我试图创建一个程序(它将在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