一尘不染

在python中将双引号shell命令传递给subprocess.Popen()?

python

我一直在尝试传递一个仅在命令行中"concat:file1|file2"为ffmpeg的参数加上双引号的命令。

但是我不能用python使它工作subprocess.Popen()。任何人都知道如何将引号传递到subprocess.Popen吗?

这是代码:

command = "ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy temp.mp4"

output,error = subprocess.Popen(command, universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()

当我这样做时,ffmpeg除了采用concat段的引号之外不会采用其他任何方式。有没有一种方法可以成功地将此行传递给subprocess.Popen命令?


阅读 285

收藏
2020-12-20

共1个答案

一尘不染

我建议使用列表形式的调用而不是引用的字符串版本:

command = ["ffmpeg", "-i", "concat:1.ts|2.ts", "-vcodec", "copy",
           "-acodec", "copy", "temp.mp4"]
output,error  = subprocess.Popen(
                    command, universal_newlines=True,
                    stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

这可以更准确地表示将要传递到最终过程的确切参数集,并且无需弄乱shell引用。

也就是说,如果您绝对要使用纯字符串版本,只需使用不同的引号(和shell=True):

command = 'ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy temp.mp4'
output,error  = subprocess.Popen(
                    command, universal_newlines=True, shell=True,
                    stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
2020-12-20