我希望运行Avconv命令并将日志记录在文件中。在Ubuntu终端中,可以在括号括起来的实际命令之后使用&>>
运算符完成。
(avconv -i SRCFILE -ss 00:15:00 -t 00:30:00 TARGETFILE -threads auto) &>> LOGFILE
以上命令在终端中运行时效果很好。
现在我有很多这样的命令可以运行,并且认为通过Python运行它们会很好。
我尝试使用os.system(command_string)
方式
,运行时没有将Avconv输出打包到LOGFILE,并且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()
方法,我收到以下错误(注意:所有文件都存在)
Traceback (most recent call last):
File "/home/usr/cnv.py", line 61, in <module>
main()
File "/home/usr/cnv.py", line 46, in main
subprocess.call(newcmd)
File "/usr/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我希望运行Avconv的多个(50+以上)命令,类似于顶部显示的版本,并将日志保存在文件而不是stdout中。我怎么做 - 用Python或其他方式?
答案 0 :(得分:0)
试试此代码
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()