我正在编译一个正在被Popen使用的ffmbc的命令行。这一切都有效,直到我添加一个导出报告的最后一行,然后ffmbc拒绝运行。
这是与Popen一起运行的命令:
command = 'ffmbc.exe -i “my_file.mov” -acodec pcm_s16le -map_audio_channel 0:1:0:0:1:0 -map_audio_channel 0:1:0:0:1:1 -map 0:0 -timecode "00:00:00:00" -vcodec prores -profile hq -vtag apch -f mov -y “my_output_file.mov”'
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
self.process1 = Popen(command, startupinfo=startupinfo)
现在如果我在命令2> "report_log.txt"
的末尾添加它,那么Popen命令就会失败,(这在命令行窗口中运行正常)。
所以这是完整的命令,它与Popen失败了:
command = 'ffmbc.exe -i “my_file.mov” -acodec pcm_s16le -map_audio_channel 0:1:0:0:1:0 -map_audio_channel 0:1:0:0:1:1 -map 0:0 -timecode "00:00:00:00" -vcodec prores -profile hq -vtag apch -f mov -y “my_output_file.mov” 2> "report_log.txt"'
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
self.process1 = Popen(command, startupinfo=startupinfo)
如果我在命令行窗口中运行上面的完整命令,那么它运行正常,但不能与Popen一起运行。不知道为什么。
答案 0 :(得分:1)
您可以通过以下方式处理Popen
的stderr输出:
import subprocess
with open('logfile', 'w') as logfile:
proc = subprocess.Popen(['cat', 'foo'], stderr=logfile)
对我来说,这会将cat: foo: No such file or directory
写入logfile
。
答案 1 :(得分:1)
2>
是一个shell重定向。除非你问,否则Popen()
不运行shell。要将stderr重定向到没有shell的文件:
with open("report_log.txt", "wb", 0) as file:
self.process = Popen(command, stderr=file)