【问题标题】:Get full command-line string from child_process.spawn从 child_process.spawn 获取完整的命令行字符串
【发布时间】:2019-03-21 06:57:12
【问题描述】:

我正在使用 child_process.spawn() 生成一个进程。如何查看执行的确切命令行(包括传递给 spawn 函数的所有命令行参数)?

这是我的示例,但不起作用:

var s = require('child_process');
var p = s.spawn('ffmpeg', ['-probesize 1024', '-i "rtsp://192.168.1.10:554/11"', 'test.h264']);

当我捕获 stderr 时,我收到一条消息“无法识别的选项 'probesize 1024'。但是,如果我从命令行运行 ffmpeg,它工作正常。所以我需要看看命令行选项的确切情况在被发送到 FFMPEG 以进行调试之前被损坏。

谢谢

【问题讨论】:

    标签: node.js child-process spawn


    【解决方案1】:

    试试

    var p = s.spawn('ffmpeg', [
        '-probesize',
        '1024',
        '-i',
        'rtsp://192.168.1.10:554/11',
        'test.h264'
    ]);
    

    在它们之间有空格但连贯的命令行参数仍然需要分开。所以-probesize1024之间需要有一个空格

    更新

    如果您想将连贯的参数保持在一起,请将shell: true 添加到选项对象:

    var p = s.spawn('ffmpeg',
        [
            '-probesize 1024',
            '-i "rtsp://192.168.1.10:554/11"',
            'test.h264'
        ],
        {
            shell: true
        }
    );
    

    【讨论】:

    • 您的答案有效,但为什么呢?我认为参数只是作为字符串传递给子进程,所以空格就是空格......你能帮我理解为什么这是不正确的吗?
    • 另外,如何传递带有问号字符的字符串?例如,当使用 rtsp://192.168.1.11:554/stream0?username=admin&password=123456 运行 ffmpeg 时,我必须引用这个。但是,如果我在通过 spawn 传递时添加引号,则会出现错误。
    • 老实说,我从来没有深入探讨过这个问题,所以我不是回答这个问题的合适人选:(。我记得上次。我记得的是:如果你用{shell: true} 作为一个选项,你首先做的事情是可能的(我会在一秒钟内更新答案)。据我了解,它模仿在C 中调用程序,我认为这个答案可能会给你一个更好的开始指向进一步研究它:stackoverflow.com/questions/46254602/…
    • 这不是原始问题的答案。最初的问题是“我如何自己获取特定的调试信息”,而不是“请为我调试这个具体案例”。
    • @SzczepanHołyszewski :我期待您的回答。如果你展示“如何 [to] 自己获取特定的调试信息”,我会给你一个赞成票
    【解决方案2】:

    我知道的老问题......但我有一个想法,可能会回答 OP 的问题

    const cp = require('child_process');
    
    var sp = cp.spawn( 'cmd', [ '/C' , 'echo', 'ffmpeg', 
        '-probesize',
        '1024',
        '-i',
        'rtsp://192.168.1.10:554/11',
        'test.h264'
    ]);
    
    sp.stdout.on( "data" , (d) => {
         console.log( `${d}`);
    });
    

    这会将 cmd 回显到控制台...

    ffmpeg -probesize 1024 -i rtsp://192.168.1.10:554/11 test.h264
    

    【讨论】:

      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多