nodejs exec让shell保持活力?

Posted

技术标签:

【中文标题】nodejs exec让shell保持活力?【英文标题】:nodejs exec keep shell alive? 【发布时间】:2013-06-02 05:44:32 【问题描述】:

我正在尝试运行一个打开 VLC 播放器并将 RTMP 视频流式传输到其中的命令。 但是当我运行它时,VLC 播放器出现然后关闭。我认为这是因为它所依赖的外壳正在被杀死。如何让 shell 保持活力?

在 Windows 中从 cmd 行运行相同的命令可以正常工作。关闭 shell 会关闭 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')

【问题讨论】:

【参考方案1】:

您指定了 Node.js,但没有提供 node.js 代码示例。我们是否应该假设exec(command); 应该代表require('child_process').exec(command);

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

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

编辑:

解决您的评论:

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

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

【讨论】:

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

以上是关于nodejs exec让shell保持活力?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 Blazor 服务器端应用程序 IIS 8.5 保持活力

在 Android 中解除绑定后,如何让服务与听众保持活力?

Android,前台服务让app保持活力吗?

如何让php执行shell

web socket server code, 调用 shell exec child_process

text ssh保持连接(保持活力)