1

我正在尝试创建一个程序(它将在 Windows 上使用)来压缩具有 7-Zip 和其他内容的文件列表。

我使用subprocess正确的参数运行 7-Zip 可执行文件。 subprocess打开带有7z.exe输出的 DOS shell;这很好,因为有一个文件压缩百分比指标,有时这个过程可能很长。我的问题是用户将能够(自愿或意外)通过以下方式中断压缩任务

  1. 单击 DOS 窗口的关闭按钮,或
  2. 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
        )
4

1 回答 1

2

您可以在其中设置一个标志startupinfo来隐藏窗口,并设置stdout=subprocess.PIPE为捕获进程的输出。

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags = subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
sp = subprocess.Popen(..., stdout=subprocess.PIPE, startupinfo=startupinfo)

请记住,这STARTUPINFO仅适用于 Windows。

于 2012-10-31T09:58:50.093 回答