2014-10-01 2 views
0

Я использую команду Popen(shlex.split(command) для запуска команды ffmpeg, которая сохраняет файлы wav из файла QuickTime Mov, а также сохраняет файл журнала ffmpeg на в то же время. если я использую это:Python - Popen (shlex.split (command), shell = False) - не работает с ffmpeg

command = './ffmpeg/ffmpeg -i /Users/me/Documents/MOVS/source.mov -map 0:1 -acodec pcm_s16le -y /Users/me/Documents/MOVS/source_01.wav' 

p = Popen(shlex.split(command), shell=False) 

Затем команда завершается правильно, но если добавить строку, которая не спасает из лог-файл, то он больше не работает, так что если я использую:

command = './ffmpeg/ffmpeg -i /Users/me/Documents/MOVS/source.mov -map 0:1 -acodec pcm_s16le -y /Users/me/Documents/MOVS/source_01.wav 2> /Users/me/Documents/MOVS/lofFile.txt' 

p = Popen(shlex.split(command), shell=False) 

Тогда нет более длительные работы. Использование любой команды в командной строке, без python, отлично работает. Если я просто использовать:

p = Popen(command, shell=True) 

Тогда все работает хорошо, но мне нужно использовать shell=False по другим причинам.

Я просто не могу понять, почему он ломает, добавив «правильный» конец строки 2> /Users/me/Documents/MOVS/lofFile.txt

+0

Исправьте меня, если я ошибаюсь, но не правильный синтаксис '2>'? (Вместо '> 2') –

+0

Ваше право, извините, просто неправильно напечатал его. Вопрос обновлен. – speedyrazor

ответ

3

IO Перенаправление обеспечивается оболочкой, поэтому, если вы установите shell=False команда не будет работать в shell, а >2 .... будет частью команды.

Возможно, в качестве обходного пути вы можете использовать опцию -report для ffmpeg. Это отправит журнал в файл с именем в соответствии с соглашением ffmpeg-YYYYMMDD-HHMMSS.log.

+0

Отличный ответ, спасибо. – speedyrazor

Смежные вопросы