子进程调用无效参数或选项未找到

2023-12-13

我试图在 Linux 上使用 subprocess.call() 调用 ffmpeg 命令,但我无法获得正确的参数。之前,我使用了 os.system 并且它有效,但不推荐这种方法。

使用带破折号的参数(例如“-i”)会出现此错误

Unrecognized option 'i "rtsp://192.168.0.253:554/user=XXX&password=XXX&channel=0&stream=0.sdp?real_stream"'.
Error splitting the argument list: Option not found

使用不带破折号的参数(如“i”)会出现此错误

[NULL @ 0x7680a8b0] Unable to find a suitable output format for 'i rtsp://192.168.0.253:554/user=admin&password=&channel=0&stream=0.sdp?real_stream'
i rtsp://192.168.0.253:554/user=XXX&password=XXX&channel=0&stream=0.sdp?real_stream: Invalid argument

这是代码

class IPCamera(Camera):
"""
    IP Camera implementation
"""
def __init__(self,
             path='\"rtsp://192.168.0.253:554/'
                  'user=XXX&password=XXX&channel=0&stream=0.sdp?real_stream\"'):

    """
        Constructor
    """
    self.path = path

def __ffmpeg(self, nb_frames=1, filename='capture%003.jpg'):
    """
    """

    ffm_input = "-i " + self.path
    ffm_rate = "-r 5"
    ffm_nb_frames = "-vframes " + str(nb_frames)
    ffm_filename = filename

    if platform.system() == 'Linux':
        ffm_path = 'ffmpeg'
        ffm_format = '-f v4l2'

    else:
        ffm_path = 'C:/Program Files/iSpy/ffmpeg.exe'
        ffm_format = '-f image2'

    command = [ffm_path, ffm_input, ffm_rate, ffm_format, ffm_nb_frames, ffm_filename]
    subprocess.call(command)

    print(command)

顺便说一句,我正在 MT7688 上运行此命令。

Thanks


您必须拆分选项:

command = [ffm_path, '-i', ffm_input, '-r', ffm_rate, '-f', ffm_format, '-vframes',  ffm_nb_frames, ffm_filename]

The ffm_input, ffm_rate, ffm_format应该只包含值:

ffm_input = self.path
ffm_rate = '5'
ffm_nd_frames = str(nb_frames)
ffm_format = 'v412' if platform.system() == 'Linux' else 'image2'

当您传递列表时,不会进行任何解析-r 5被视为单个参数,但程序希望您提供两个单独的参数-r其次是5.


基本上,如果您将它们作为列表中的单个元素,就好像您在命令行上引用它们一样:

$ echo "-n hello"
-n hello
$ echo -n hello
hello$

在第一个例子中echo看到一个参数-n hello。由于它与任何选项都不匹配,因此只打印它。在第二种情况下echo看到两个参数-n and hello,第一个是抑制行尾的有效选项,正如您所看到的,提示是在之后打印的hello而不是在自己的线路上。

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

子进程调用无效参数或选项未找到 的相关文章

随机推荐

  • 如何使用Androidfragmentmanager传递变量[重复]

    这个问题在这里已经有答案了 我有以下简单的代码可以在内容框架中从一个片段切换到另一个片段 在下面的代码中是否有一种简单的方法来传递变量 FragmentManager fm getActivity getFragmentManager fm
  • 试图理解这个简短的汇编指令,但我不明白

    我们有一个任务 给定的是 2 寻址的汇编指令 机器 mov 202 100 r1 记下替代此的最小汇编指令序列 说明 见上文 where n rx 按后增量索引的寄存器 n 是索引值 rx 是寄存器 x 单个数值 直接寻址 存储 我们应该使
  • 如何在 TypeScript 中设置类型参数的下限?

    在 TypeScript 我的版本 2 1 1 中 可以为类型参数设置上限 如下所示 class Animal class Cat extends Animal class Kitten extends Cat function foo a
  • 存储 bcrypt 哈希值

    根据 PHP 的文档 bcrypt salt 是由 2a 两位数的成本参数 以及字母表中的 22 位数字 0 9A Za z 因此 如果我使用 crypt 函数对我的密码进行哈希处理 则结果输出包括前 7 个字符 2a 10 如果 10 是
  • WindowsFormsHost 上的工具栏覆盖

    我有一个嵌入在 WPF 窗口内的 WindowsFormsHost 控件中的 SWF 对象 我想在 swf 影片上添加一个工具栏 我下面的代码片段的问题是 当新的子控件添加到主机控件时 或者加载电影 我还没有弄清楚是哪一个 工具栏实际上是不
  • Grails:Spring Security CAS 在 2.2.3 中工作,但在 2.3.0 中不起作用

    我有一个使用 Groovy 2 0 的 Grails 2 2 3 项目 我使用 Spring Security 将其设置为使用 CAS 进行身份验证 使用 LDAP 进行用户角色 当我运行应用程序时 一切都按预期进行 任何人都允许访问 ap
  • 当选择另一个复选框时,如何启用/禁用复选框?

    我了解了如何在选中一个复选框时选中 取消选中或隐藏 显示 但我正在寻找的是当用户单击 快餐 时 当我有 5 个复选框 快餐 餐饮 外带 送货 和 酒吧 时 当用户选中时 其余复选框将被禁用餐饮 休息被禁用 但当用户选中 携带 时 仅快餐和餐
  • imagettftext() - 找不到字体位置

    我正在使用 imagettftext 函数创建自定义验证码脚本 我已在运行 PHP 版本 5 3 8 的 PC 上成功运行并测试了代码 但是当我上传到运行 PHP 版本 5 2 17 的共享托管帐户时 出现以下错误 Warning imag
  • window.fullScreen=true 不起作用

    我想以全屏模式打开我的 html 页面 我尝试在 body 的 onload 事件处理程序中执行此 javascript window fullScreen true 但不幸的是这似乎不起作用 有没有其他方法可以达到同样的效果 我不认为你可
  • Identity列增量值差距巨大

    我创建了一个带有标识列的表 当我在该表中插入值时 标识列显示值之间存在巨大的增量差距 身份值从 6 跳到 10001 这是按部门 id 排序的输出 输出截图在这里 这是我创建的表 Create Table STG2 Department D
  • 更改 Eclipse 中的默认 XML 编辑器

    Eclipse 挂起时使用 XML 默认编辑器太慢并且会出现很多问题 我读到 如果我们更改编辑器 它就可以正常工作 那么如何删除现有编辑器 您可以自定义它们 窗口 gt 首选项 gt 常规 gt 编辑器 gt 文件关联 在那里 您必须选择一
  • jqGrid 中使用工具栏搜索默认在列中间搜索

    阅读 jqGrid wiki 后 并以以下示例为例 jqGrid 中不区分大小写的搜索 包括隐藏字段 我找不到我想做的事情 是否有任何搜索选项可以在列中的任何位置启用搜索 自动通配符 如果该列包含 Apple Iphone 我将能够通过搜索
  • 如何将消息重定向到死信队列Azure服务总线

    我正在使用隔离的天蓝色函数从队列接收消息 我需要验证收到的消息 如果无效 则将其发送到死信队列 我发现唯一的方法是抛出异常 重试 10 次后 消息将被移至死信队列 当然这不是一个好的解决方案 也许有人面临同样的任务 谢谢 Function
  • 如何让这个嵌套通用参数系统正常工作?

    所以我正在努力让一个相当复杂的系统运行起来 这是我正在尝试的基础知识 Rules abstract class Rule stuff class ExampleRule extends Rule stuff 处理程序 abstract cl
  • 在 Swift 4 中,如果按下“Backspace”按钮且文本字段为空,如何移动到上一个 UITextField?

    我正在尝试解决这个问题 当我使用下面的代码时 我可以从一个文本字段移动到下一个文本字段 然后单击 退格 按钮 但仅当文本字段中有文本时才有效 我的问题 当文本字段为空时 如何单击 退格 按钮并移至上一个文本字段 第二个问题 如何去掉屏幕上闪
  • 通过 Android 访问 Google 帐户 ID/用户名

    如何在代码中访问用户的 Google 帐户 ID 用户名 我正在构建一个应用程序 它将调用 Web 服务来存储数据 并且我想识别提交数据的人的身份 我遇到了同样的问题 这两个链接为我解决了 第一个是这个 如何在 Android 手机上找回已
  • 字符串数组列表成一个逗号分隔的字符串

    尝试将字符串的 Arraylist 转换为一个大逗号分隔的字符串 但是当我使用 String joined TextUtils join participants 调试器显示参与者的大小为 4 但是连接值为 因此为空 private Arr
  • Symfony 1.4 邮件程序中的电子邮件正文?

    我正在使用 Symfony 1 4 邮件程序 在其中构建电子邮件所需的各个部分 然后使用以下命令将其发送出去 this gt getMailer gt composeAndSend sender recipient subject body
  • 在反应本机地图上需要未知模块“未定义”

    我想实现react native mapshere 但是当我导入上面的 MapView 时App js与代码import MapView from react native maps 我收到此错误 需要未知模块 未定义 如果您确定该模块存在
  • 子进程调用无效参数或选项未找到

    我试图在 Linux 上使用 subprocess call 调用 ffmpeg 命令 但我无法获得正确的参数 之前 我使用了 os system 并且它有效 但不推荐这种方法 使用带破折号的参数 例如 i 会出现此错误 Unrecogni