2013-06-02 82 views
1

我試圖運行打開VLC播放器並將RTMP視頻流入它的命令。 但是當我運行它時,VLC播放器出現,然後關閉。我認爲這是因爲它依賴的shell正在被殺死。我怎樣才能保持殼體活着?nodejs exec保持shell活着?

從窗口中的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') 

回答

4

您指定的Node.js,但沒有提供Node.js的代碼的例子。我們應該假設exec(command);應該代表require('child_process').exec(command);

如果是這樣,您可能想用childprocess.spawn代替。 Exec有侷限性,適用於通過stdio輸出文本數據的短期運行過程。如果exec'd進程的輸出超過了預先分配的緩衝區,它將會終止(不一定是你的問題,但有可能)。 Spawn用於更長時間運行的進程(在某些情況下,它們甚至可以從父進程中分離)。

如果它仍然立即關閉,那麼問題很可能不是由於shell過早終止。讓我們知道。

編輯:

爲了解決您的評論:

基本上你會根據發生在哪裏的空間(除非參數被包裝在引號,這將被視爲一個參數)分手的爭論。你也可以使用 手動執行管道,但在spawn文檔中有一個如何實現的例子。

另一種方法是簡單地生成一個shell腳本文件,然後使用節點來執行該腳本。

+0

我添加了我試圖運行到我的描述的確切命令。我不知道如何通過'spawn'來運行它。我想我需要把它分解爲參數?但我不知道如何,因爲命令是這麼長的 –

+0

看看編輯是否解決你的問題。 –

+0

這很煩人,'spawn'如何需要像這樣的參數......而手動管道的東西,真是一團糟。我可能會生成並運行一個shell腳本,這是個好主意。 –