gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:31:56 29 4
gpt4 key购买 nike

我一直在尝试在 ffmpeg 的 "concat:file1|file2" 参数周围传递一个仅在命令行中使用文字双引号的命令。

但是,我无法使用 subprocess.Popen() 在 python 中完成这项工作。任何人都知道如何将引号传递给 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 命令?

最佳答案

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

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

关于python - 将python中的双引号shell命令传递给subprocess.Popen()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928860/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com