2015-12-12 2 views
2

Я запускаю свой собственный скрипт для запуска HandBrakeCLI. HandBrake занимает несколько часов, чтобы сделать это.Python, получить статус от запущенной команды

Я намерен запустить этот сценарий из хрон, так что не будет никакого реального вывода из сценария (я могу обновить файл время от времени.)

HandBrake может сказать мне, что она делает в нижней части линии терминала во время его работы.

Я использую Popen для запуска ручного тормоза.

Как я могу посмотреть на выходной сигнал ручного тормоза, пока он работает, чтобы получить статус в реальном (ну рядом с реальным) временем?

Вот команда, я использую:

command = ['HandBrakeCLI', '-i', long_source, '-o', long_target, '-f', 'mp4'] # + a bunch more 
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = p.communicate() 
print out 
print err 

Это работает, но я хочу, чтобы результат от Popen во время выполнения, а не ждать, пока после того, как это делается.

Спасибо, Марк.

PS. Сервер Ubuntu 12.04

+0

Что вы пробовали? Мне кажется, что «subprocess.Popen» будет правильным правилом, поэтому, не видя сообщение об ошибке, я не знаю, почему вы не смогли бы этого сделать. – jez

+0

Вот команда, которую я использую: 'p = subprocess.Popen (['HandBrakeCLI', '-i', long_source, '-o', long_target, '-f', 'mp4' .. больше] STDOUT = subprocess.PIPE, STDERR = subprocess.PIPE) ' \t \t' вне, эээ = p.communicate() ' \t \t' печати out' \t \t 'печать err' –

+0

Это работает, но я хочу, выход из Popen ** во время ** исполнения, не ждите, пока это будет сделано. Форматирование в этом разделе комментариев не работает. –

ответ

0

Вы можете направлять вывод cron в файл и ссылаться на этот файл.

-1

Вместо .communicate() вы можете просто начать подпроцесс с помощью Popen() и затем периодически проверять его stdout и stderr построчно:

sp = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

# later.... 
while continueMyEventLoop: 
    out = sp.stdout.readline() 
    err = sp.stderr.readline() 

    DealWith(out, err) 
    DoOtherStuff() 
Смежные вопросы