![](/img/trans.png)
[英]Python subprocess.check_call - how to direct stdout and stderr to _both_ screen and log file?
[英]Run avconv in python and direct stdout/stderr to a file
我希望运行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还是其他方式?
试试这个代码
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.