2013-09-30 282 views
33

我想我的node.js服務器上運行一個shell腳本的node.js(子進程),但什麼都沒有發生......運行shell腳本

childProcess.exec('~/./play.sh /media/external/' + req.params.movie, function() {}); //not working 

另一個子進程運行完美,但高於韓元過程「T。

childProcess.exec('ls /media/external/', movieCallback); //works 

如果我在終端中運行腳本,那麼它的工作原理。有任何想法嗎? (chmod + x已設置)

+0

是否有任何[''error''s](http://nodejs.org/api/child_process.html#child_process_event_error)或者它輸出任何[' 'data''](http://nodejs.org/api/stream.html#stream_event_data)改爲['stdout'](http://nodejs.org/api/child_process.html#child_process_child_stdout)或['stderr' ](http://nodejs.org/api/child_process.html#child_process_child_stderr)? –

+0

/bin/sh:1:/root/./play.sh:找不到,我如何修改我的命令來運行存儲在home dir中的腳本? – Ralf

回答

57

exec函數回調傳遞給它的錯誤stdout和stderr參數。看看他們是否能幫助你診斷問題隨地吐痰,他們出去控制檯:

exec('~/./play.sh /media/external/' + req.params.movie, 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}); 
+0

/bin/sh:1:/root/./play.sh:找不到,如何修改我的命令來運行存儲在home dir中的腳本? – Ralf

+0

謝謝,發現它,這只是不正確的道路。 (我想我必須睡覺(23:39 UTC + 1)) – Ralf

+0

是'exec('〜/./ play.sh/media/external /'+ req.params.movi​​e ...'一個安全的結構? – Yaur

5
exec('sh ~/play.sh /media/external/' + req.params.movie ,function(err,stdout,stderr){ 
     console.log(err,stdout,stderr); 
}) 

運行您play.sh shell腳本與/media/external/ + req.params.movi​​e作爲參數。輸出可通過stdout,回調中的stderr變量提供。

OR嘗試此

var myscript = exec('sh ~/play.sh /media/external/' + req.params.movie); 
myscript.stdout.on('data',function(data){ 
    console.log(data); // process output will be displayed here 
}); 
myscript.stderr.on('data',function(data){ 
    console.log(data); // process error output will be displayed here 
});` 
+0

請解釋你的回答 – Alex

+0

你的意思是'myscript.stderr.on('error',...'? – activedecay