gpt4 book ai didi

python - 防止关闭通过子进程打开的 DOS shell 窗口

转载 作者:行者123 更新时间:2023-12-01 05:54:26 26 4
gpt4 key购买 nike

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

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

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

最佳答案

您可以在 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。

关于python - 防止关闭通过子进程打开的 DOS shell 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com