在python中运行avconv并将stdout/stderr定向到一个文件
我希望运行Avconv命令并将日志记录在一个文件中。在Ubuntu终端中,这可以在括号中的实际命令之后使用在python中运行avconv并将stdout/stderr定向到一个文件,python,ubuntu,avconv,Python,Ubuntu,Avconv,我希望运行Avconv命令并将日志记录在一个文件中。在Ubuntu终端中,这可以在括号中的实际命令之后使用&>操作符来完成,即 (avconv -i SRCFILE -ss 00:15:00 -t 00:30:00 TARGETFILE -threads auto) &>> LOGFILE 在终端中运行时,上述命令工作正常 现在我有很多这样的命令要运行,我认为通过Python运行它们会很好 我尝试使用os.system(命令字符串)方式 ,它在运行时不会将Avconv输出打
&>
操作符来完成,即
(avconv -i SRCFILE -ss 00:15:00 -t 00:30:00 TARGETFILE -threads auto) &>> LOGFILE
在终端中运行时,上述命令工作正常
现在我有很多这样的命令要运行,我认为通过Python运行它们会很好
os.system(命令字符串)
方式
,它在运行时不会将Avconv输出打包到日志文件,并且Avconv命令似乎在Python脚本完成后执行——我为调试而输入的一些字符串输出证明了这一点。我还收到一些权限错误。下面是输出的第一部分的样子
AVCONV COMMAND EXECUTED
sh: 1: : Permission denied
sh: 1: : Permission denied
sh: 1:
PROGRAM DONE
: Permission denied
$ avconv version 11.2-6:11.2-1, Copyright (c) 2000-2014 the Libav developers
built on Jan 18 2015 05:12:33 with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu2)
Trailing options were found on the commandline.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ...
subprocess.call()
方法,我得到以下错误(注意:所有文件都存在)
回溯(最近一次呼叫最后一次):
文件“/home/usr/cnv.py”,第61行,在
main()
文件“/home/usr/cnv.py”,第46行,主
子进程调用(newcmd)
文件“/usr/lib/python2.7/subprocess.py”,第522行,在调用中
返回Popen(*popenargs,**kwargs)。等待()
文件“/usr/lib/python2.7/subprocess.py”,第710行,在__
错误读取,错误写入)
文件“/usr/lib/python2.7/subprocess.py”,第1335行,在执行子进程中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录
from subprocess import Popen, PIPE
FILES = (
( 'FirstSourceFile.avi', 'FirstDestinationFile.mp4' ),
( 'SecondSourceFile.avi', 'SecondDestinationFile.mp4' ),
# ... and so on...
)
log_file = open( 'Logfile.txt', 'w' )
for src_name, dst_name in FILES:
cmd_list = [ 'avconv', '-i', src_name, '-ss', '00:15:00', '-t', '00:30:00', dst_name, '-threads', 'auto' ]
p1 = Popen( cmd_list, stdin=PIPE, stdout=PIPE, stderr=PIPE )
p1out, p1err = p1.communicate()
if p1out is not None: log_file.write( p1out )
if p1err is not None: log_file.write( p1err )
log_file.close()
from subprocess import Popen, PIPE
FILES = (
( 'FirstSourceFile.avi', 'FirstDestinationFile.mp4' ),
( 'SecondSourceFile.avi', 'SecondDestinationFile.mp4' ),
# ... and so on...
)
log_file = open( 'Logfile.txt', 'w' )
for src_name, dst_name in FILES:
cmd_list = [ 'avconv', '-i', src_name, '-ss', '00:15:00', '-t', '00:30:00', dst_name, '-threads', 'auto' ]
p1 = Popen( cmd_list, stdin=PIPE, stdout=PIPE, stderr=PIPE )
p1out, p1err = p1.communicate()
if p1out is not None: log_file.write( p1out )
if p1err is not None: log_file.write( p1err )
log_file.close()