【问题标题】:Pass arguments to executable in NodeJS CLI application将参数传递给 NodeJS CLI 应用程序中的可执行文件
【发布时间】:2018-06-03 16:08:30
【问题描述】:

我有一个可执行文件,我想从 NodeJS CLI 应用程序中调用它。这是我目前所拥有的:

var exec = require('child_process').exec;
exec(`./${name_of_executable}`, (err, stdout, stderr) => {
    // I want to take user input on which this executable depends on
});

我该怎么做?

【问题讨论】:

  • exec() 的第一个参数可以在可执行文件名之后包含空格分隔的参数。
  • 但我不知道打电话给exec()时的论据。用户在调用可执行文件后输入参数。
  • 好吧,那么“参数”这个词就不合适了。
  • 我猜你想给子进程注入标准输入

标签: javascript node.js linux bash command-line-interface


【解决方案1】:

如果你想传递一些参数,你可以使用:

const { execFile } = require('child_process');
const child = execFile('node', ['--version'], (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  console.log(stdout);
});

如果您想将自定义流作为标准输入传递给子进程,请使用 spawn:

const { spawn } = require('child_process');

// Child will use parent's stdios
spawn('prg', [], { stdio: 'inherit' });

// Spawn child sharing only stderr
spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });

// Open an extra fd=4, to interact with programs presenting a
// startd-style interface.
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });

文档中的所有示例:https://nodejs.org/api/child_process.html#child_process_options_stdio

【讨论】:

  • 如果我没记错的话,从第一个代码块中,node 是我要执行的文件的名称,在 [] 括号中我放置了用户参数.对吗?
  • 您在括号中传递命令行参数,因此将调用node --version。如果您的子进程在执行期间从 stdin 请求任何数据(例如,通过提示或 readline),您需要通过 stdio 管道挂钩将子进程与主进程粘合。它比传递命令行参数更复杂,但如果你通过文档,你会弄明白的。
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多