2012-07-20 84 views
0

我正在使用node.js和express來爲我的家庭媒體中心創建一個可以通過瀏覽器進行操作的控制器。Node.js spawn vlc子進程無法在express中工作

我在產生VLC過程中遇到了很多麻煩,但奇怪的是它只在從節點提示符執行時才起作用,而不是從文件運行時起作用。

以下是我已經測試:

在節點命令行/解釋:require('child_process').spawn('vlc'); 這個工程,我所期望的,我可以看到VLC窗口打開並持續在屏幕上。

如果我採用完全相同的代碼行,並將其放在另一個文件(比如test.js)中並使用node test.js從命令行運行,則不會發生任何事情。註銷子進程對象中的幾秒鐘後,給了我這樣的:

{ _closesNeeded: 3, 
    _closesGot: 3, 
    signalCode: null, 
    exitCode: 1, 
    killed: false, 
    _internal: null, 
    pid: 11837, 
    stdin: 
    { _handle: null, 
    _pendingWriteReqs: 0, 
    _flags: 0, 
    _connectQueueSize: 0, 
    destroyed: true, 
    bytesRead: 0, 
    bytesWritten: 0, 
    allowHalfOpen: undefined, 
    writable: false, 
    readable: false, 
    _connecting: false, 
    _connectQueue: null, 
    _idleNext: null, 
    _idlePrev: null }, 
    stdout: 
    { _handle: null, 
    _pendingWriteReqs: 0, 
    _flags: 1, 
    _connectQueueSize: 0, 
    destroyed: true, 
    bytesRead: 0, 
    bytesWritten: 0, 
    allowHalfOpen: undefined, 
    writable: false, 
    readable: false, 
    _events: { close: [Function] }, 
    _connecting: false, 
    _connectQueue: null, 
    _idleNext: null, 
    _idlePrev: null }, 
    stderr: 
    { _handle: null, 
    _pendingWriteReqs: 0, 
    _flags: 1, 
    _connectQueueSize: 0, 
    destroyed: true, 
    bytesRead: 215, 
    bytesWritten: 0, 
    allowHalfOpen: undefined, 
    writable: false, 
    readable: false, 
    _events: { close: [Function] }, 
    _connecting: false, 
    _connectQueue: null, 
    _idleNext: null, 
    _idlePrev: null } } 

什麼特別奇怪的這個是,我可以以同樣的方式啓動其它程序和它的作品。例如,將'vlc'替換爲'gedit'將導致文本編輯器完全按預期顯示。

任何人都知道這可能是什麼?

回答

2

這只是一個預感,但我敢打賭,在VLC過程甚至可以「跑步」這麼說之前,你過早地退出了你的測試。

執行這樣的:

var spawn = require('child_process').spawn; 
var vlc = spawn('vlc'); 
vlc.on('exit', function(code){ 
    console.log('Exit code: ' + code); 
    //EXIT TEST HERE 
}); 

Spawn Documentation.

編輯: 剛纔看到 'test.js',並認爲你正在運行測試。發佈您的Express代碼的相關部分。

+0

我剛剛將你發佈的代碼複製到一個.js文件中,並使用節點運行它:'sudo node .js'。我立即得到退出代碼1。我想知道是否有一個我沒有考慮到的權限問題?這就是說,gedit和其他程序似乎運行良好。我不知道我錯過了什麼。 – 2012-07-20 16:31:36

+0

出於好奇,我在整個目錄下遞歸地嘗試了'chmod 777',現在一切似乎都奏效了。感謝您的幫助,您的例子確實幫助我磨練了這個問題。 :) – 2012-07-20 16:41:24