如何正确传递子进程参数

2024-01-09

我正在尝试自动连接(格式正确的)mp4 视频文件的文件夹。

(我的问题的这个编辑版本将问题减少到了我困惑的最低水平。原始标题询问了之间的差异subprocess.call and subprocess.run但事实证明问题出在其他地方。)

Why does

subprocess.call('ffmpeg -hide_banner -loglevel error -i movie1.mp4 -i movie2.mp4 -i credits.mp4 \
-filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]"  \
-map "[outv]" -map "[outa]" "output.mp4"',shell=True)

工作正常(其中s是一串输入,并且count是输入的数量),但是

#python3 
#makeFinalExample.py

import subprocess

s = '-i movie1.mp4 -i movie2.mp4 -i credits.mp4'
count = 3
print(f's prints out as: {s}')


commandList = ['ffmpeg',
                '-hide_banner',
                '-loglevel',
                'error',
                #str(s),
                '{0}'.format(s),
                '-filter_complex',
                "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n={0}:v=1:a=1[outv][outa]".format(count),
                '-map',
                "[outv]",
                '-map',
                "[outa]",
                "output.mp4"]
print(f'the command list prints out as {commandList}')
subprocess.run(commandList)

收到错误(字符串是否传递为str(s),或按照显示的格式...

Unrecognized option 'i movie1.mp4 -i movie2.mp4 -i credits.mp4'.
Error splitting the argument list: Option not found

这是输入字符串的打印输出

-i movie1.mp4 -i movie2.mp4 -i credits.mp4

这是命令列表的打印输出

['ffmpeg', '-hide_banner', '-loglevel', 'error', '-i movie1.mp4 -i movie2.mp4 -i credits.mp4', '-filter_complex', '[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=3:v=1:a=1[outv][outa]', '-map', '[outv]', '-map', '[outa]', 'output.mp4']

这与subprocess.call vs subprocess.run做,区别在于你正在使用shell=True在第一种情况下,在第二种情况下则不然。这两个函数在这方面以及几乎所有其他方面的行为完全相同(subprocess.run是一个较新的函数,它支持很多很多选项并返回一个更有用的对象,但以其最基本的形式,它使用相同的 API 执行完全相同的工作)。

问题是你需要分割字符串s就像您拆分所有其他命令行参数一样(错误消息实际上揭示了这一点,但我想您必须知道要查找什么才能捕获它)。当你省略shell=True每个选项都需要是一个单独的列表项,例如

[ ..., '-i', 'movie1.mp4', '-i', 'movie2.mp4', '-i', 'credits.mp4', ...]

功能shlex.split()可以帮助您正确地将命令拆分为标记:

commandList = [
    'ffmpeg',
    '-hide_banner',
    '-loglevel', 'error',
    *shlex.split(s),
    '-filter_complex',
    "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n={0}:v=1:a=1[outv][outa]".format(count),
    '-map', "[outv]",
    '-map', "[outa]",
    "output.mp4"]

但更好的功能设计可能是允许用户仅传入输入视频文件名列表,然后从那里获取它。 (那我猜count也不需要明确指定;这只是len(inputfilenames).)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确传递子进程参数 的相关文章

  • 在 Pandas 中按日期获取有效合约

    我在检测 pandas DataFrame 中的活动合约方面遇到了一些困难 假设每一行都是一个协商 对于每一行 我有两列 initial date 和 end date 我想知道的是按日期划分的活跃合约数量 到目前为止我做了一个非常低效的方
  • 行未从树视图复制

    该行未在树视图中复制 我在按行并复制并粘贴到未粘贴的任何地方后制作了弹出复制 The code popup tk Menu tree opportunity tearoff 0 def row copy item tree opportun
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • 即使使用 .loc[row_indexer,col_indexer] = value 时也会设置 WithCopyWarning

    这是我的代码中得到的行之一SettingWithCopyWarning value1 Total Population value1 Total Population replace to replace value 4 然后我将其更改为
  • 如何使用Python将WebP图像转换为Gif?

    我已经尝试过这个 from PIL import Image im Image open this webp im save that gif gif save all True 这给了我这个错误 类型错误 不支持的操作数类型 tuple
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 如何在 Python 中将彩色输出打印到终端?

    是否有与 Perl 等效的 Python 语言 print color red print
  • 具有多个元素的数组的真值是二义性错误吗? Python

    from numpy import from pylab import from math import def TentMap a x if x gt 0 and x lt 0 5 return 2 a x elif x gt 0 5 a
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • 检查字符串是否只有字母和空格 - Python

    试图让 python 返回一个字符串仅包含字母和空格 string input Enter a string if all x isalpha and x isspace for x in string print Only alphabe
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t

随机推荐

  • 无法解析主机名 git:提供节点名或服务名,或未知

    我尝试做git pull rebase我收到以下错误 ssh Could not resolve hostname git nodename nor servname provided or not known fatal Could no
  • 为什么部分与页面高度不匹配?

    我正在编写一个报告 该报告需要附加到另一个报告以生成更大的报告 因此它只有标题 页脚和摘要部分 问题是我遇到编译错误 但我不知道原因 这是我的jrxml文件 包含的部分 为简洁起见省略
  • stopPropgation 是否会阻止事件在捕获阶段传播?

    我在看http www quirksmode org js events order html http www quirksmode org js events order html这部分含糊不清 在 Microsoft 模型中 您必须设
  • python中的打印函数对可以打印的字符串长度有限制吗?

    我正在尝试打印一个大字符串 它的大小为 100 Mb 并且需要一次完成 看起来它正在被截断 虽然这不能回答您的问题 但用于移动大量数据print可能是一个坏主意 print is meant用于简短的信息打印输出 它提供了您在移动大数据时通
  • Kotlin / Android Studio - 如何将变量从覆盖 fun 传递到应用程序的其余部分?

    我环顾四周 没有找到解决我的问题的好答案 在我的应用程序上 我有一个计时器 该计时器在单击后停止 我想根据剩余时间计算分数 我可以使用 millisUntilFinished 来计算分数 但我无法在我的应用程序中重用分数变量 您能帮我找到正
  • 限时试用和 Windows 认证

    如果您想对某个应用程序实施限时试用 您可能需要留下一些标志 注册表项 文件等 这样程序就不能被重新安装 是否有任何方案可以让您在完成此操作的同时仍然通过各种 Windows 认证计划 一般来说 申请必须正确 完整 从机器上卸载 这 包括删除
  • ffmpeg - 生成 moov 原子

    我目前正在使用blackmagic的prorecorder录制视频 我使用 ffmpeg 将视频即时转码为 mp4 视频容器 持续时间未知 因为我正在对 prorecorder 输出到命名管道的 ts 进行转码 我的目标是尝试使用浏览器播放
  • 如何在spark中合并两个预排序的rdd?

    我有两个大型 csv 文件 按其中一列进行了预排序 有没有办法利用它们已经排序的事实来更快地获得新的排序 RDD 而无需再次完全排序 简短的回答 不 在使用 Apache Spark 提供的排序工具时 无法利用两个输入 RDD 已经排序的事
  • jqgrid加载大数据集而不分页

    我想知道是否有更好的方法从服务器加载大型 Json 数据集 我使用 jqgrid 作为 loadonce true 我需要一次加载大约 1500 条记录 而且我不使用分页选项 有没有更好的方法来实现这一目标 先感谢您 这是我的网格代码 fu
  • 谷歌表格中填充谷歌表格的平均持续时间

    我有一个从谷歌表单自动填充的谷歌工作表 有一个包含持续时间的列 当我尝试平均这些持续时间时 我得到除以零的错误 我尝试更改单元格格式 但没有任何效果 事实上 无论我选择什么格式 它都不会改变 我认为格式是根据填充工作表的表单来锁定的 对于获
  • 将进程发送到后台并将控制权返回到我的 shell

    我正在为我的 CS 类编写一个 shell 并且该项目的一部分涉及如果用户传入 字符 则在后台运行一个进程 如果一个进程在前台运行 我只需execvp该进程并且它仍然控制着终端 因为它位于前台 但是 如果它是后台进程 我必须在开始执行进程后
  • 无法将函数的数组结果分配给数组

    我正在尝试将函数的数组结果分配给数组 如果我尝试将结果数组的一个元素分配给我的数组 它工作正常 但在尝试将整个结果数组分配给我的数组时它会返回错误 无法分配给数组 Sub test Dim lol 6 as Double lol Hehe2
  • 将存储过程传递给 sp_send_dbmail

    我在 SQL Server 2008 中使用 sp send dbmail 发送查询结果 我将查询移动到一个过程中 并尝试在 sp send dbmail 过程中使用该过程 如下所示 EXEC msdb dbo sp send dbmail
  • 如何为 Foundation 的 Orbit 图像滑块预加载图像?

    使用Zurb的Foundation 4 1 5 最新版本 轨道图像滑块 http foundation zurb com docs components orbit html效果很好 不幸的是 在最初的几秒钟里 所有图像都显示为一个巨大的项
  • 使用groovy Sql批量插入?

    如何在模拟准备好的语句时使用 groovy Sql 进行批量插入 我发现的所有示例都与以下类似 并且不使用准备好的语句 withBatch stmt gt stmt addBatch insert into table field1 fie
  • 从 Eclipse 和 Spark Context 将 Spark 应用程序作为纱线作业提交

    我已经可以提交了local来自我的 Eclipse IDE 的 Spark 作业 用 Scala 编写 但是 我想修改我的 Spark 上下文 在我的应用程序内 以便当我 运行 应用程序 在 Eclipse 内 时 作业将使用 Yarn 作
  • 从服务器导入更改后出现 GIT 错误

    我试图确定为什么网站上的功能可以在本地工作但不能远程工作 所以我的想法是下载远程站点并执行 git diff 以便发现任何差异 然而 自从我这样做以来 所有 GIT 命令都得到满足 fatal Unable to read current
  • R - 如何向 pheatmap 添加线条和文本?

    我正在使用创建热图pheatmap 函数使用以下代码 library pheatmap pheatmap data matrix 1 11 cluster rows F cluster cols F scale none show rown
  • 从用户角度来看,Jenkins 和 Hudson 最显着的区别是什么?

    距 Jenkins 与 Hudson 分手已有 10 个月左右 当查看项目主页时 我想知道 Hudson 和 Jenkins 之间到底有什么区别 从变更日志中我并没有真正学到很多东西 有很多更改 主要区别似乎是 Jenkins 发布频率更高
  • 如何正确传递子进程参数

    我正在尝试自动连接 格式正确的 mp4 视频文件的文件夹 我的问题的这个编辑版本将问题减少到了我困惑的最低水平 原始标题询问了之间的差异subprocess call and subprocess run但事实证明问题出在其他地方 Why