【发布时间】:2012-10-31 09:36:52
【问题描述】:
我正在尝试创建一个程序(它将在 Windows 上使用)来压缩包含 7-Zip 和其他内容的文件列表。
我使用subprocess 运行带有正确参数的7-Zip 可执行文件。
subprocess 打开一个带有7z.exe 输出的DOS shell;这很好,因为有一个文件压缩百分比指标,有时这个过程可能很长。我的问题是用户将能够(自愿或意外)通过
- 单击 DOS 窗口的关闭按钮,或
- 按Ctrl-C。
是否可以禁用从subprocess 打开的 DOS shell 的任何类型的输入?或者,如何在运行时将 DOS shell 的输出传递给我的程序?我尝试使用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
)
【问题讨论】:
标签: python python-2.7 subprocess