Node.js nodejs exec让shell保持活动状态?

Node.js nodejs exec让shell保持活动状态?,node.js,exec,vlc,rtmp,Node.js,Exec,Vlc,Rtmp,我试图运行一个命令,打开VLC播放器并将RTMP视频流到其中。 但当我运行它时,VLC播放器出现,然后关闭。我认为这是因为它所依赖的外壳正在被杀死。我怎样才能让贝壳活着 在windows中从cmd行运行相同的命令可以正常工作。关闭外壳关闭VLC播放器 我的代码如下所示 var exec = require('child_process').exec exec('"Z:/downloads/rtmpdump-2.4-git-010913-windows/rtmpdump.exe" -r "rtmp

我试图运行一个命令,打开VLC播放器并将RTMP视频流到其中。 但当我运行它时,VLC播放器出现,然后关闭。我认为这是因为它所依赖的外壳正在被杀死。我怎样才能让贝壳活着

在windows中从
cmd
行运行相同的命令可以正常工作。关闭外壳关闭VLC播放器

我的代码如下所示

var exec = require('child_process').exec
exec('"Z:/downloads/rtmpdump-2.4-git-010913-windows/rtmpdump.exe" -r "rtmp://199.9.251.83/app/jtv__cQlY3imWtyDf4Cr" -j "ae9d2c8bbe586ac9f88a4fae9ec5841c3976092c:{\"swfDomains\": [\"justin.tv\", \"jtvx.com\", \"xarth.com\", \"twitchtv.com\", \"twitch.tv\", \"newjtv.com\", \"jtvnw.net\", \"wdtinc.com\", \"imapweather.com\", \"facebook.com\", \"starcrafting.com\"], \"streamName\": \"jtv__cQlY3imWtyDf4Cr\", \"expiration\": 1370153205.846189, \"geo_ip\": \"91.10.111.130\", \"server\": \"video3-1\"}" --swfVfy "http://www-cdn.jtvnw.net/widgets/live_embed_player.r4b02d38f442d7cae5646f1a1c17078362f5fd857.swf?channel=games&referer=&channel=games" -v -o - | "C:/Program Files (x86)/VideoLAN/VLC/vlc.exe" - --play-and-exit')

您指定了Node.js,但没有提供Node.js代码的示例。我们应该假定
exec(命令)
应该表示
require('child_process')。exec(命令)

如果是这样,您可能希望使用。Exec有其局限性,适用于通过stdio输出文本数据的短期运行进程。如果exec进程的输出超过了预先分配的缓冲区,它将终止(不一定是您的问题,但有可能)。Spawn适用于运行时间较长的进程(在某些情况下,它们甚至可以与父进程分离)

如果它仍然立即关闭,那么问题很可能不是由于外壳过早终止造成的。让我们知道

编辑:

针对您的评论:

基本上,您会根据空格出现的位置来分解参数(除非参数用引号括起来,这将被视为单个参数)。你也会 必须手动执行管道,但是在spawn文档中有一个示例说明了如何执行该操作


另一种方法是简单地生成一个shell脚本文件,然后使用node执行该脚本。

您指定了node.js,但没有提供node.js代码的示例。我们应该假定
exec(命令)
应该表示
require('child_process')。exec(命令)

如果是这样,您可能希望使用。Exec有其局限性,适用于通过stdio输出文本数据的短期运行进程。如果exec进程的输出超过了预先分配的缓冲区,它将终止(不一定是您的问题,但有可能)。Spawn适用于运行时间较长的进程(在某些情况下,它们甚至可以与父进程分离)

如果它仍然立即关闭,那么问题很可能不是由于外壳过早终止造成的。让我们知道

编辑:

针对您的评论:

基本上,您会根据空格出现的位置来分解参数(除非参数用引号括起来,这将被视为单个参数)。你也会 必须手动执行管道,但是在spawn文档中有一个示例说明了如何执行该操作


另一种方法是简单地生成一个shell脚本文件,然后使用node执行该脚本。

我在描述中添加了我正试图运行的确切命令。虽然
spawn
,但我不知道如何运行它。我想我需要把它分解成ARG?但是我不知道怎么做,因为命令太长了,
spawn
需要这样的参数。。。还有手动管道,真是一团糟。我可能会生成并运行一个shell脚本,好主意。
spawn('init.bat')
什么都不做
exec('init.bat')
工作正常。但为什么node命令从未消失。我必须执行
ctrl+c
来杀死它。我想如果你想使用spawn,“cmd.exe”是实际的程序,“init.bat”是作为参数发送的。我在我的描述中添加了我正试图运行的确切命令。虽然
spawn
,但我不知道如何运行它。我想我需要把它分解成ARG?但是我不知道怎么做,因为命令太长了,
spawn
需要这样的参数。。。还有手动管道,真是一团糟。我可能会生成并运行一个shell脚本,好主意。
spawn('init.bat')
什么都不做
exec('init.bat')
工作正常。但为什么node命令从未消失。我必须执行
ctrl+c
来杀死它。我想如果你想使用spawn,“cmd.exe”是实际的程序,“init.bat”是作为参数发送的。