Обратите внимание на аргумент «shell
» для subprocess.Popen
: он указывает, обрабатывается ли передаваемая вами команда оболочкой или нет.
То, что «2>&1
» - это одна из тех вещей, которые должны анализироваться оболочкой, в противном случае FFmpeg (как и большинство программ) будет пытаться рассматривать его как имя файла или значение параметра.
Последовательность Python, наиболее близко имитирующая оригинал, вероятно, будет больше похожа на
p1 = subprocess.Popen("ffmpeg -i http://url/1video.mp4 2>&1", shell = True, stdout = subprocess.PIPE)<BR>
p2 = subprocess.Popen(r"perl -lane 'print $1 if /(\d+x\d+)/'", shell = True, stdin = p1.stdout, stdout = subprocess.PIPE)<BR>
dimensions = p2.communicate()[0]