我正在尝试创建一个程序(它将在Windows上使用)来压缩带有7-Zip和其他内容的文件列表。
我使用subprocess
使用正确的参数运行7-Zip可执行文件。
subprocess
打开一个带有7z.exe
输出的DOS shell;这很好,因为有一个文件压缩的百分比指示器,有时这个过程可能很长。我的问题是用户可以自愿或意外地通过
是否可以禁用从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
)
答案 0 :(得分: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。