Python Popen shell=False causes OSError: [Errno 2] No such file or directory FFREPORT
Python Popen shell=False causes OSError: [Errno 2] No such file or directory FFREPORT
我在 python 2.7 on OSX 中的一个已经工作的 ffmpeg 命令的前面添加了一个 FFREPORT 命令,这是为了重定向报告日志文件,但是我收到一个错误并且可以想办法解决它。
命令如下:
command = 'FFREPORT="level=48:file=/Users/myself/Desktop/TESTFFMPEGOUTPUT.txt" /Users/myself/Desktop/Python/ffmpeg/ffmpeg -i /Volumes/GRAID/TestInput.mov /Volumes/GRAID/TestOutput.mov'
self.process1 = Popen(shlex.split(command), shell=False)
这是给我的错误:
raise child_exception
OSError: [Errno 2] No such file or directory
更新:
我现在已将其更改为包含以下答案,但我遇到了另一个问题。我需要日志文件的路径作为变量,所以我正在尝试:
ffreportCommand = 'FFREPORT=level=48:file=' + self.logFilePath
self.process1 = Popen(shlex.split(command), shell=False, env=dict(ffreportCommand))
但出现以下错误:
self.process1 = Popen(shlex.split(command), shell=False, env=dict(ffreportCommand))
ValueError: dictionary update sequence element #0 has length 1; 2 is required
更新:
固定为:
ffreportCommand = "level=48:file=" + self.logFilePath
self.process1 = Popen(shlex.split(command), shell=False, env=dict(FFREPORT='%s' % ffreportCommand))
FFREPORT
是一个环境变量。因此调用Popen
时使用the env
parameter设置:
command = '/Users/myself/Desktop/Python/ffmpeg/ffmpeg -i /Volumes/GRAID/TestInput.mov /Volumes/GRAID/TestOutput.mov'
self.process1 = Popen(
shlex.split(command), shell=False,
env=dict(FFREPORT="level=48:file=/Users/myself/Desktop/TESTFFMPEGOUTPUT.txt"))
如果您希望基于变量构建字典,您可以使用
ffreport = "level=48:file={}".format(self.logFilePath)
self.process1 = Popen(shlex.split(command), shell=False,
env=dict(FFREPORT=ffreport))
顺便说一下,dict(A=val)
等同于 {'A':val}
。所以另一种选择是
self.process1 = Popen(shlex.split(command), shell=False,
env={'FFREPORT':ffreport})
我在 python 2.7 on OSX 中的一个已经工作的 ffmpeg 命令的前面添加了一个 FFREPORT 命令,这是为了重定向报告日志文件,但是我收到一个错误并且可以想办法解决它。
命令如下:
command = 'FFREPORT="level=48:file=/Users/myself/Desktop/TESTFFMPEGOUTPUT.txt" /Users/myself/Desktop/Python/ffmpeg/ffmpeg -i /Volumes/GRAID/TestInput.mov /Volumes/GRAID/TestOutput.mov'
self.process1 = Popen(shlex.split(command), shell=False)
这是给我的错误:
raise child_exception
OSError: [Errno 2] No such file or directory
更新:
我现在已将其更改为包含以下答案,但我遇到了另一个问题。我需要日志文件的路径作为变量,所以我正在尝试:
ffreportCommand = 'FFREPORT=level=48:file=' + self.logFilePath
self.process1 = Popen(shlex.split(command), shell=False, env=dict(ffreportCommand))
但出现以下错误:
self.process1 = Popen(shlex.split(command), shell=False, env=dict(ffreportCommand))
ValueError: dictionary update sequence element #0 has length 1; 2 is required
更新: 固定为:
ffreportCommand = "level=48:file=" + self.logFilePath
self.process1 = Popen(shlex.split(command), shell=False, env=dict(FFREPORT='%s' % ffreportCommand))
FFREPORT
是一个环境变量。因此调用Popen
时使用the env
parameter设置:
command = '/Users/myself/Desktop/Python/ffmpeg/ffmpeg -i /Volumes/GRAID/TestInput.mov /Volumes/GRAID/TestOutput.mov'
self.process1 = Popen(
shlex.split(command), shell=False,
env=dict(FFREPORT="level=48:file=/Users/myself/Desktop/TESTFFMPEGOUTPUT.txt"))
如果您希望基于变量构建字典,您可以使用
ffreport = "level=48:file={}".format(self.logFilePath)
self.process1 = Popen(shlex.split(command), shell=False,
env=dict(FFREPORT=ffreport))
顺便说一下,dict(A=val)
等同于 {'A':val}
。所以另一种选择是
self.process1 = Popen(shlex.split(command), shell=False,
env={'FFREPORT':ffreport})