繁体   English   中英

在python中运行avconv并将stdout / stderr定向到文件

[英]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运行它们会很好。

  1. 我尝试使用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 ... 
  2. 我也尝试使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM