我正在使用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'將導致文本編輯器完全按預期顯示。
任何人都知道這可能是什麼?
我剛剛將你發佈的代碼複製到一個.js文件中,並使用節點運行它:'sudo node .js'。我立即得到退出代碼1。我想知道是否有一個我沒有考慮到的權限問題?這就是說,gedit和其他程序似乎運行良好。我不知道我錯過了什麼。 –
2012-07-20 16:31:36
出於好奇,我在整個目錄下遞歸地嘗試了'chmod 777',現在一切似乎都奏效了。感謝您的幫助,您的例子確實幫助我磨練了這個問題。 :) – 2012-07-20 16:41:24