【问题标题】:How to execute an external program from within Node.js?如何从 Node.js 中执行外部程序?
【发布时间】:2011-08-12 02:49:17
【问题描述】:

是否可以从 node.js 中执行外部程序?是否有相当于 Python 的 os.system() 或任何添加此功能的库?

【问题讨论】:

  • 您想使用child_process 模块。请参阅the documentation,它提供了各种用例的几个清晰示例。

标签: node.js command exec


【解决方案1】:
var exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr) {
  // result
});

【讨论】:

  • 对子进程的结果采取行动的最佳方式是什么。示例...如果进程返回退出代码 0,并且我想调用不同的方法,我似乎会遇到大量错误。
  • @continuousqa -- 这个答案已有 4 年历史。如果您遇到问题,请在 SO 上发布一个新问题,并在必要时参考这个问题。
  • 这个article有很好的使用child_process的技巧。
  • @JoãoPimentelFerreira - 这个问题已经 7 岁了。如果您需要帮助,我建议您开一个新的
【解决方案2】:

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

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);
});

【讨论】:

  • 我使用了这段代码,但它无法显示生成进程的输出stackoverflow.com/questions/21302350/…
  • @PaulVerest:您的输出可能在 stderr 而不是 stdout。就我而言,虽然close 永远不会到来......
  • 标准输入呢?是否可以向进程发送数据?
【解决方案3】:

最简单的方法是:

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

unref 是在不等待“yourApp”的情况下结束进程所必需的

这里是执行docs

【讨论】:

    【解决方案4】:

    来自 Node.js 文档:

    Node 通过 ChildProcess 类提供了一个三向的 popen(3) 工具。

    http://nodejs.org/docs/v0.4.6/api/child_processes.html

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多