У меня есть сценарий, который вызывает ffprobe, анализирует его вывод и выводит его на консоль.Subprocess.communicate печатает новую строку для стандартного вывода
Вот урезанная версия этого без разбора кода и командной строки опций:
"""Invoke ffprobe to query a video file and parse the output"""
def ffprobe(fname):
import subprocess as sub
import re
p = sub.Popen(['ffprobe', fname], stderr=sub.PIPE)
stdout, stderr = p.communicate()
def main():
ffprobe("foo.mp4")
#print options.formatstr % locals()
if __name__ == '__main__':
main()
Вы можете видеть, что только print
заявление в своем коде закомментирована, поэтому программа не должна действительно выводят что угодно. Тем не менее, это то, что я получаю:
[email protected]:~/co/youtube$ python ffprobe.py foo.mp4
[email protected]:~/co/youtube$ python ffprobe.py foo.mp4
[email protected]:~/co/youtube$ python ffprobe.py foo.mp4
Новая линия таинственно выводится каждым вызовом. Откуда он исходит, и как я могу с ним справиться?
Как представляется, подобный вопрос SO, за исключением того, что он не использует вызов communicate
(http://stackoverflow.com/questions/7985334/python-subprocess-proc-stderr-read-introduce-extra-lines).
спасибо. Захват стандартного вывода из ffprobe сделал трюк. Вы правы во мне, неправильно называя 'stdout' как' stdin' - я был в спешке. С тех пор я исправил ошибку. – misha