Javascript 将参数传递给NodeJS CLI应用程序中的可执行文件

Javascript 将参数传递给NodeJS CLI应用程序中的可执行文件,javascript,node.js,linux,bash,command-line-interface,Javascript,Node.js,Linux,Bash,Command Line Interface,我有一个可执行文件,我想从nodejscli应用程序调用它。这就是我到目前为止所做的: 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 }); 我如何才能做到这一点?如果要传递一些参数,可以使用: c

我有一个可执行文件,我想从nodejscli应用程序调用它。这就是我到目前为止所做的:

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

我如何才能做到这一点?

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

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

文档中的所有示例:

exec()的第一个参数可以在可执行文件名后包含空格分隔的参数。但是在调用
exec()
时,我不知道这些参数。用户在调用可执行文件后输入参数。好吧,那么“参数”一词不合适。我想您应该将stdin注入子进程如果我没有弄错的话,从第一块代码开始,
节点
是我要执行的文件名,在
[]
我将用户参数放在括号中。正确吗?您在括号中传递命令行参数,因此将调用
节点--version
。如果子流程在执行期间(例如,通过提示符或readline)从stdin请求任何数据,则需要通过stdio管道挂钩将子流程与主流程粘合在一起。这比传递命令行参数要复杂得多,但是如果你仔细阅读文档,你会明白的。