node.js中生成的进程立即退出

node.js中生成的进程立即退出,node.js,spawn,avconv,Node.js,Spawn,Avconv,我正试图在node.js中生成一个avconv进程。 它应该在stdin上接收数据,并将转换后的数据输出到stdout 当命令在shell中工作时,它会立即在node.js中关闭,我不知道为什么: avconv -v quiet -i pipe:0 -vn -f s16le -acodec pcm_s16le pipe:1 这就行了,在节点中: var a = spawn('avconv', ['-v quiet -i pipe:0 -vn -f s16le -acodec pcm_s16le

我正试图在node.js中生成一个avconv进程。 它应该在
stdin
上接收数据,并将转换后的数据输出到
stdout

当命令在shell中工作时,它会立即在node.js中关闭,我不知道为什么:

avconv -v quiet -i pipe:0 -vn -f s16le -acodec pcm_s16le pipe:1
这就行了,在节点中:

var a = spawn('avconv', ['-v quiet -i pipe:0 -vn -f s16le -acodec pcm_s16le pipe:1']);

a.on('exit', function(code) {
    pr(code, true);
})
我立即得到一个“1”退出代码。
有人能告诉我这里出了什么问题吗?

您需要自己分离参数数组:

var a = spawn('avconv', ['-v', 'quiet', '-i', 'pipe:0', '-vn', '-f', 's16le', '-acodec', 'pcm_s16le', 'pipe:1']);

您从命令行工作中使用的空间定界由shell提供(bash、zsh…)。shell使用空格将您的命令分解为参数,并允许您通过添加引号来表示“我希望这是一个单独的参数”。

您的命令参数不应该是单独的字符串吗?别担心,这会得到相同的结果您是否尝试通过管道stderr查看错误描述?哦,不,您是对的。它们首先是单独的字符串,但按照
['-v quiet','-i pipe:0']
的顺序,我不知道它会自动引用它们……引用实际上是特定于shell的。我现在添加了一个详细的答案。有没有办法通过衍生进程获取并打印这种错误?有什么我可以听的活动吗。?具体地说,当需要root权限才能作为子进程执行某些bash脚本时(使用spawn)。在这种情况下,我应该听哪一个事件?@YairNevet你最好问一个新问题,这个问题与此完全无关……在我的情况下,我没有听被抛出的stderr。