Popen冻结/PySide GUI/cmd弹出菜单

2024-06-29 00:09:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为djv_转换器创建一个简单的GUI:http://djv.sourceforge.net/documentation.html 它的工作很好,但我缺乏一些反馈,从这个应用程序,当我运行它与Popen。在

^{1}$

通常应用程序会将一些进度输出到控制台,我想用它来更新我的进度条。在

问题是,任何类型的stdout都会在进程完成后发生。它看起来好像在创建子进程时冻结,然后在创建完成后解冻。我试过用交流child.stdout.read同样的事情也会发生。在

我从一个从注册表调用的bat文件运行python代码,这样就可以在我的右键单击菜单下使用它。GUI是用PySide编写的。在

我也无法停止cmd窗口的弹出,不管它是pythonw和.pyw文件还是修改过的.bat文件。在

如果有人知道问题的原因,请告诉我:)

非常感谢, KK公司


Tags: 文件进度条应用程序http类型net进程html
1条回答
网友
1楼 · 发布于 2024-06-29 00:09:22

The issue is that any kind of stdout happens after the process is finished.

直到缓冲区已满,subprocess.Popen才显示标准输出。在您的例子中,缓冲区从不填充,因此在子进程完成之前不会显示任何内容。在

我可以给你指出一些建议: real time subprocess.Popen via stdout and PIPE

你的处境可能会有所不同,因为没有一个解决方案对任何人来说都不是灵丹妙药。我个人发现,指示subprocess.Popen打开一个无缓冲的Python就做到了。在

command = ["python", "-u", "python_file.py"]
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for line in iter(p.stdout.readline, ''):
    line = line.replace('\r', '').replace('\n', '')
    print line
    sys.stdout.flush()

相关问题 更多 >