NodeJS - ChildProcess execFile - Uncaught Error: spawn ENOENT

问题描述 投票:2回答:1

我试图通过node.js作为外部应用程序运行一个unix可执行文件: (参考文献)

const execFile = require('child_process').execFile;
const executable = execFile('identifiers', ['--help'], [execPath], (error, stdout, stderr) => {
    if (error) {
        console.error('stderr', stderr);
        throw error;
    }
    console.log('stdout', stdout);
});

该计划 identifiers 应与参数 --help,而不是失败的。

Uncaught Error: spawn identifiers ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:264)
    at onErrorNT (internal/child_process.js:456)
    at processTicksAndRejections (internal/process/task_queues.js:80)

console.log(execPath) 打印正确的 identifiers exec路径,在我的节点项目中。


这实际上是返回根节点工程的目录,并以代码0退出。

var sys   = require('sys'),
    spawn = require('child_process').spawn,
    ls    = spawn('ls', ['-l']);

ls.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});

ls.on('exit', function (code) {
  console.log('exit code ' + code);
});

  • 为什么 execFile 抛出错误?
  • 如何在NodeJS中适当地运行带有args的可执行文件?
javascript node.js exec child-process spawn
1个回答
1
投票

感谢 @innis 指出,参数应该是个 <Object>:

const execFile = require('child_process').execFile;
const executable = execFile('./identifiers', ['--id', '1'], {'cwd': execPath}, (error, stdout, stderr) => {
    if (error) {
        console.error('stderr', stderr);
        throw error;
    }
    console.log('stdout', stdout);
});
© www.soinside.com 2019 - 2024. All rights reserved.