Python Popen shell=False导致OSError:[Errno 2]没有这样的文件或目录FFREPORT

2024-09-24 06:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在OSX上的Python2.7中,我在一个已经在运行的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)

这给了我一个错误:

^{pr2}$

更新:

我现在把它改成下面的答案,但我得到了另一个问题。我需要将日志文件的路径作为变量,因此正在尝试:

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))

Tags: 命令selffalse错误shelllevelffmpegcommand
1条回答
网友
1楼 · 发布于 2024-09-24 06:30:44

FFREPORT是一个环境变量。因此,在调用Popen时使用the ^{} 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"))

如果您希望基于可以使用的变量构建dict

^{pr2}$

顺便说一下,dict(A=val)相当于{'A':val}。所以另一种选择是

self.process1 = Popen(shlex.split(command), shell=False, 
                      env={'FFREPORT':ffreport})

相关问题 更多 >