python popen 参数_Python Popen-未知参数:

我正在Unknown argument: |使用下面的脚本时,我不知道为什么它不喜欢的|。我在Windows上,使用Python 2.7.11:

import subprocess

from subprocess import Popen, PIPE, STDOUT

import time

command = 'VSPipe.exe --y4m script.vpy - | ffmpeg.exe -f yuv4mpegpipe -i - -c:v prores -an output.mov'

process1 = Popen(command, stderr=PIPE, shell=False)

while True:

line = process1.stderr.readline().decode('utf-8')

print line

time.sleep(2)

更新:根据下面的建议,我现在已经尝试过了,但是我得到了pipe:: Operation not permitted。我究竟做错了什么?

import subprocess

from subprocess import Popen, PIPE, STDOUT

import time

command1 = 'VSPipe.exe --y4m script.vpy -'

command2 = 'ffmpeg.exe -f yuv4mpegpipe -i - -c:v prores -an output.mov'

process1 = Popen(command1, stdout=PIPE)

process2 = Popen(command2, stdin=process1.stdout, stderr=PIPE)

print process2.communicate()

另一个更新:因此,使用以下建议并尝试其他方法,我将获得相同的结果pipe:: Operation not permitted。这是完整的sdterr,我还能尝试什么:

"F:/ffmpeg/VapourSynth/VSPipe.exe" --y4m "C:/Users/myself/Desktop/script.vpy" -

"F:/ffmpeg/ffmpeg.exe" -f yuv4mpegpipe -i - -c:v prores -an -y "//192.168.0.100/media/temp/OutMov.mov"

ffmpeg version N-77203-gb8e5b1d Copyright (c) 2000-2015 the FFmpeg developers

built with gcc 5.2.0 (GCC)

configuration: --arch=x86 --target-os=mingw32 --cross-prefix=/Users/myself/Desktop/Download/ffmpeg-windows-build-helpers-master/sandbox/mingw-w64-i686/bin/i686-w64-mingw32- --pkg-config=pkg-config --disable-w32threads --enable-gpl --enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --enable-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_STATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++ --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --extra-libs=-loleaut32 --enable-libx264 --enable-libxvid --enable-libmp3lame --enable-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-libfreetype --enable-libopus --enable-frei0r --enable-filter=frei0r --enable-libvo-aacenc --enable-bzlib --enable-libxavs --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroedinger --enable-libvpx --enable-libilbc --enable-libwavpack --enable-libwebp --enable-libgme --enable-dxva2 --enable-libdcadec --enable-avisynth --enable-gray --enable-libopenh264 --extra-libs=-lpsapi --extra-cflags= --enable-static --disable-shared --prefix=/Users/myself/Desktop/Download/ffmpeg-windows-build-helpers-master/sandbox/mingw-w64-i686/i686-w64-mingw32 --enable-nonfree --enable-libfdk-aac --disable-libfaac --enable-nvenc --enable-runtime-cpudetect

libavutil 55. 10.100 / 55. 10.100

libavcodec 57. 17.100 / 57. 17.100

libavformat 57. 19.100 / 57. 19.100

libavdevice 57. 0.100 / 57. 0.100

libavfilter 6. 20.100 / 6. 20.100

libswscale 4. 0.100 / 4. 0.100

libswresample 2. 0.101 / 2. 0.101

libpostproc 54. 0.100 / 54. 0.100

pipe:: Operation not permitted

更新:她是ffmpeg报告:

F:/ffmpeg/ffmpeg.exe -f yuv4mpegpipe -i - -c:v prores -an -y //192.168.0.100/media/temp/OutMov.mov -report

ffmpeg version N-77203-gb8e5b1d Copyright (c) 2000-2015 the FFmpeg developers

built with gcc 5.2.0 (GCC)

configuration: --arch=x86 --target-os=mingw32 --cross-prefix=/Users/myself/Desktop/Download/ffmpeg-windows-build-helpers-master/sandbox/mingw-w64-i686/bin/i686-w64-mingw32- --pkg-config=pkg-config --disable-w32threads --enable-gpl --enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --enable-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_STATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++ --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --extra-libs=-loleaut32 --enable-libx264 --enable-libxvid --enable-libmp3lame --enable-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-libfreetype --enable-libopus --enable-frei0r --enable-filter=frei0r --enable-libvo-aacenc --enable-bzlib --enable-libxavs --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroedinger --enable-li libavutil 55. 10.100 / 55. 10.100

libavcodec 57. 17.100 / 57. 17.100

libavformat 57. 19.100 / 57. 19.100

libavdevice 57. 0.100 / 57. 0.100

libavfilter 6. 20.100 / 6. 20.100

libswscale 4. 0.100 / 4. 0.100

libswresample 2. 0.101 / 2. 0.101

libpostproc 54. 0.100 / 54. 0.100

Splitting the commandline.

Reading option '-f' ... matched as option 'f' (force format) with argument 'yuv4mpegpipe'.

Reading option '-i' ... matched as input file with argument '-'.

Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'prores'.

Reading option '-an' ... matched as option 'an' (disable audio) with argument '1'.

Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.

Reading option '//192.168.0.100/media/temp/OutMov.mov' ... matched as output file.

Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.

Finished splitting the commandline.

Parsing a group of options: global .

Applying option y (overwrite output files) with argument 1.

Applying option report (generate a report) with argument 1.

Successfully parsed a group of options.

Parsing a group of options: input file -.

Applying option f (force format) with argument yuv4mpegpipe.

Successfully parsed a group of options.

Opening an input file: -.

[AVIOContext @ 006d9800] Statistics: 0 bytes read, 0 seeks

pipe:: Operation not permitted

更新:使用此代码,我仍然得到相同的结果pipe:: Operation not permitted:

import subprocess

import os

from subprocess import Popen, PIPE, STDOUT

import shlex

VsPipe = 'F:/ffmpeg/VapourSynth/VSPipe.exe'

vpyScript = 'C:/Users/myself/Desktop/Boychoir-preview_SMALL_JobID_189.vpy'

ffmpeg = 'F:/ffmpeg/ffmpeg.exe'

outputPath = '//192.168.0.100/media/temp/OutMov.mov'

command1 = shlex.split('"%s" --y4m "%s" - ' % (VsPipe, vpyScript))

command2 = shlex.split('"%s" -f yuv4mpegpipe -i - -c:v prores -an -y "%s" -report' % (ffmpeg, outputPath))

process1 = subprocess.Popen(command1, stdout=subprocess.PIPE)

ls_out, _ = process1.communicate()

process2 = subprocess.Popen(command2, stdin=subprocess.PIPE, stderr=subprocess.PIPE)

grep_out, grep_err = process2.communicate(input=ls_out)

print grep_err

更新:修复,原来是文件路径权限问题,感谢所有帮助。

解决方案

当您设置shell到False的args(即第一个)参数应该是一个程序的名字,如果它是一个字符串。否则,它应该是一个字符串序列,第一个是程序,其余的是参数。

使用管道时,shell的重要性在于:

VSPipe.exe --y4m script.vpy - | ffmpeg.exe -f yuv4mpegpipe -i - -c:v prores -an output.mov

所有都不被认为是论点。到的参数VSPipe.exe是--y4m和script.vpy。的参数ffmpeg.exe是-f,yuv4mpegpipe,-i等。壳是什么处理管-它启动两个节目(随它们的参数),但它通过第一这样做创建一个管,使得stdout从第一变为连接到stdin所述第二的。

如果您没有支持管道的外壳,则可以通过在两者中同时启动它们,然后将输出从第一个传输到第二个在python中进行模拟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值