如何从Node.js内部执行外部程序?


Answers:


140
var exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr){
    // result
});

2
对子进程的结果采取行动的最佳方法是什么。示例...如果该过程返回退出代码0,并且我想调用其他方法,则似乎遇到了很多错误。
2015年

@continuousqa-这个答案已经4岁了。如果您遇到问题,请在SO上发布一个新问题,并在必要时参考此问题。
马克·卡恩

1
文章对使用好的建议child_process
Adriano P

@JoãoPimentelFerreira-这个问题是7岁。我建议打开一个新的,如果你需要帮助
马克·卡恩

75

exec的内存限制为512k的缓冲区大小。在这种情况下,最好使用spawn。使用spawn可以在运行时访问已执行命令的stdout

var spawn = require('child_process').spawn;
var prc = spawn('java',  ['-jar', '-Xmx512M', '-Dfile.encoding=utf8', 'script/importlistings.jar']);

//noinspection JSUnresolvedFunction
prc.stdout.setEncoding('utf8');
prc.stdout.on('data', function (data) {
    var str = data.toString()
    var lines = str.split(/(\r?\n)/g);
    console.log(lines.join(""));
});

prc.on('close', function (code) {
    console.log('process exit code ' + code);
});

1
我接受了这段代码,但它无法显示生成的进程stackoverflow.com/questions/21302350/…的
Paul Verest 2014年

1
@PaulVerest:您的输出可能在stderr而不是中stdout。就我而言,虽然close永远不会到来...
hippietrail

1
那stdin呢?是否可以将数据发送到流程?
埃尔南Eche

18

最简单的方法是:

const {exec} = require("child_process")
exec('yourApp').unref()

取消引用是结束您的过程而不必等待“ yourApp”的必要条件

这是执行文档


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.