Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Popen freeze/PySide GUI/cmd弹出窗口_Python_User Interface_Cmd_Pyside - Fatal编程技术网

Python Popen freeze/PySide GUI/cmd弹出窗口

Python Popen freeze/PySide GUI/cmd弹出窗口,python,user-interface,cmd,pyside,Python,User Interface,Cmd,Pyside,我正在为djv_转换器创建一个简单的GUI: 它的工作很好,但我缺乏一些反馈,从这个应用程序,当我运行它与波本 args = [djv_path, newout, "%smov" % moviename,"-speed", speed ,"-scale", scale, "-save", "quicktime", "quality", quality, "-save", "quicktime", "codec", codec, "-channel", channel] child

我正在为djv_转换器创建一个简单的GUI: 它的工作很好,但我缺乏一些反馈,从这个应用程序,当我运行它与波本

args =  [djv_path, newout, "%smov" % moviename,"-speed", speed ,"-scale", scale, "-save",    "quicktime",  "quality", quality, "-save", "quicktime",  "codec", codec, "-channel", channel]

child = subprocess.Popen(args,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
通常,应用程序会向控制台输出一些进度,我想用它来更新进度条

问题是,任何类型的stdout都会在流程完成后发生。它看起来像是在创建子进程时冻结,然后在完成时解冻。我试过使用沟通child.stdout.read这两种方法,同样的情况也发生了

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

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

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

非常感谢, KK

问题是,任何类型的stdout都是在进程被删除之后发生的 完成了

subprocess.Popen
在缓冲区满之前不会显示标准输出。在您的情况下,缓冲区从不填充,因此在子流程完成之前不会显示任何内容

请允许我向您介绍这篇文章,并提出一些建议:

你的想法可能会有所不同,因为没有一个解决方案似乎是任何人的灵丹妙药。我个人发现,指示
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()

非常感谢你的回答。我忘了补充一句,我曾尝试在stdout中刷新任何内容,但没有成功。我以前也使用过你推荐的线程,但没有一种方法有效。或者至少它们的工作方式是一样的:当外部程序终止时,我得到了输出,这对我没有好处。是否是特定的应用程序阻止了我的GUI应用程序?再次感谢:)@krzykli可能是一个愚蠢的问题,但是当你从命令行(不是从subprocess.Popen而是直接从命令行)运行你的程序时,它会将输出实时传输到终端吗?是的。它显示了每10%左右将图像序列转换为mov文件的进度。