当前位置: 首页 > 面试题库 >

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

艾原
2023-03-14
问题内容

我一直在尝试传递一个仅在命令行中"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命令?


问题答案:

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

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


 类似资料:
  • 如果你需要在命令行下插入一个值,通常需要使用引号将其括起来,尤其是当其包含空格时更是如此。 shellquote 函数可以携带任意数量的参数(包括数组), 它会使用引号将每个参数都括起来并返回一个可以传递到 Shell 命令行上的以空格间隔的字符串。 在下面的例子中,我们想要创建一个用于文件改名的 exec 资源, 然而源文件名和目标文件名都包含空格,因此在命令行上需要正确地使用引号将它们括起来。

  • 问题内容: 当提供一些参数时,我想使我的python脚本从命令行运行。但是,参数之一应该是特定于脚本一个片段的选项列表。字符串解析是在逗号分隔“命令行列表”字符串之后实际构造列表的唯一方法吗?如果是这样,您将如何处理? 示例:-details = [‘name’,’title’,’address’] 问题答案: 程序: 命令行: 输出: 此代码段将执行短或长命令切换(例如或),并在切换到Pytho

  • 问题内容: 我有一个在远程服务器上执行Shell脚本的Hudson作业。 它的shell命令是: 我将此构建标记为已参数化,并添加了一个字符串参数: 当我运行它时,会分配参数,但会将其传递到Shell脚本中。 问题答案: 参数化的Build Jenkins插件文档指出 由参数添加的所有环境变量均为 大写 在您的情况下,这应该起作用:

  • 问题内容: 假设我Button在Python中使用进行了以下操作: 当我按下按钮时会调用该方法,但是如果我想向该方法传递一些参数呢? 我尝试使用以下代码: 这只是立即调用该方法,而按该按钮则无济于事。 问题答案: 我个人更喜欢lambdas在这种情况下使用,因为imo更加简单明了,并且如果你无法控制被调用的方法,也不会强迫你编写很多包装方法,但这当然是一个问题。 这就是使用lambda的方式(请注

  • 问题内容: 我是Python和Eclipse的新手,在理解如何将命令行参数传递给在Eclipse(Pydev)中运行的脚本时遇到一些困难。 以下链接说明了如何将命令行参数传递给python脚本。 要将命令行参数传递给模块(来自上面链接的代码), 我需要输入python控制台 要么 如何在Eclipse(Pydev)中将相同的参数传递给Python脚本? 谢谢 ! 问题答案: 如果您希望程序以交互方

  • 问题内容: 我需要稍后再运行一个mail.php文件,而不是让用户在提交register.php时等待发送验证电子邮件。 因此,我选择在1分钟后使用 at 命令在命令行中运行mail.php( 在register.php 中 调用 ): 但是,当我处于at命令的交互模式时,我只能将参数发送到该php文件。 由于我希望这是自动的,因此我需要在运行时使用shell脚本: 但是我找不到传递 {email