2013-09-30 243 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