如何在Node.js中生成脚本并将其传递给shell?
E.g。我可以创建这个文件,例如hello.R
,将其设为可执行文件chmod +x hello.R
并从命令行./hello.R
运行它:
#!/usr/bin/Rscript
hello <- function( name ) { return (sprintf( "Hello, %s", name ); })
cat(hello("World"));
我想做的是从Node做同等的事情。特别是在内存中生成一个更复杂的R脚本(例如,使用模板等作为字符串),执行它(使用exec
或spawn
?),并阅读stdout
。
但是我无法弄清楚如何将脚本传递给R.我试过这个(除其他外):
var rscript = [
hello <- function( name ) { return (sprintf( "Hello, %s", name ); })
cat(hello("World"));
].join('\n');
var exec = require('child_process').exec;
exec(rscript, { shell: '/usr/bin/R'}, function(err, stdout, stderr) {
if (err) throw(err);
console.log(stdout);
});
然而,由于似乎/usr/bin/R
和/usr/bin/Rscript
都不理解-c
开关,因此失败了:
答案 0 :(得分:2)
检查child_process的nodejs文档。您应该能够像在终端上一样spawn
Rscript
或R
命令,并通过child.stdin
发送命令。
var c = require('child_process');
var r = c.spawn("R","");
r.stdin.write(rscript);
/* now you should be able to read the results from r.stdout a/o r.stderr */