2010-08-19 2 views
1

Я могу вызвать FFmpeg с подпроцессом. Приобретите и извлеките нужные данные, как это происходит (для достижения прогресса), но только в консоли. Я огляделся и увидел, что вы не можете получить данные «вживую» when running with pythonw. Тем не менее, ожидая, пока процесс не завершится, чтобы получить данные спорны, так как я пытаюсь обернуть PyQT GUI вокруг FFmpeg, так что я могу иметь довольно бары прогресса и этажерку. Итак, вопрос в том, можете ли вы извлечь «живые» данные из вызова подпроцесса при использовании pythonw?Извлечение stdout из подпроцесса в Windows

Я не пробовал просто компилировать приложение с py2exe еще в качестве приложения для Windows, это устранит проблему?

+0

Вопрос, который вы связали, показывает вам, как использовать трубы с подпроцессами - вы пробовали это? Что случилось? – katrielalex

ответ

4
process = subprocess.Popen(your_cmd, shell=true, stdout=subprocess.PIPE, 
          stderr=subprocess.STDOUT) 

count=0 
while True: 
    buff = process.stdout.readline() 

    if buff == '': 
     count += 1 

    if buff == '' and process.poll() != None: 
     break 

    sys.stdout.write(buff) 

process.wait() 
+0

Это устранило проблему. Я фактически использовал ALMOST тот же самый код, однако я не хватал stderr, поэтому он давал мне проблему с недопустимым заголовком. После добавления stderr он работал. Благодаря! – Cryptite

0

В своем запросе на подпроцесс.Пообретите stdout=subprocess.PIPE. Затем вы сможете прочитать из процесса .stdout.