Я создаю простой графический интерфейс для djv_converter: http://djv.sourceforge.net/documentation.html Он работает нормально, но мне не хватает обратной связи с этим приложением, когда я запускаю его с помощью Popen.Popen freeze/PySide GUI/cmd popup
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 и то же самое происходит.
Я запустил свой код python из файла bat, который вызывается из реестра, поэтому я могу использовать его под своим правом меню. GUI написан в PySide.
Я также не могу остановить всплывающее окно CMD, будь то файл pythonw и .pyw или модифицированный .bat-файл.
Если кто-нибудь знает, что может быть причиной проблемы, пожалуйста, дайте мне знать :)
Спасибо большое, KK
Большое спасибо за ответ. Я забыл добавить, что я попытался сбросить что-либо в stdout без успеха. Я также прошёл через поток, который вы рекомендовали, и ни один из методов не работает. Или, по крайней мере, они работают одинаково: поскольку внешняя программа завершается, я получаю свой результат, что не подходит для меня. Может ли это быть конкретное приложение, которое блокирует мое графическое приложение? Опять же, большое спасибо :) – krzykli
@krzykli, вероятно, глупый вопрос, но когда вы запускаете свою программу из командной строки (не из подпроцесса.Popen, а непосредственно из командной строки), то она выводит вывод на терминал в в режиме реального времени? – ochawkeye
Да, это так. Он показывает ход преобразования последовательности изображений в файл mov каждые 10% или около того. – krzykli