node.js - nodejs 子进程 - 错误 : spawn node ENOENT

标签 node.js child-process

我正在使用这段代码尝试生成一个需要运行脚本的子进程。

const child = require('child_process').spawn;
const path = require('path');
const script = path.format({dir: __dirname, base: 'myscript.js'});

    child('node', [script], {
        cwd: __dirname,
        env: {
            TEST_USERNAME: 'myuser',
            TEST_PASSWORD: 'mypassword'
        }
    }).on('error', (error) => {
        console.log(error);
    });

当我尝试运行我的 index.js 脚本时出现此错误

Error: spawn node ENOENT
    at Process.ChildProcess._handle.onexit (node:internal/child_process:276:19)
    at onErrorNT (node:internal/child_process:476:16)
    at processTicksAndRejections (node:internal/process/task_queues:80:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn node',
  path: 'node',
  spawnargs: [ '/Users/dev/Desktop/cli-training/demo.js' ]
}

更新

我正在尝试在 inquirer.js 向用户提示一些问题后运行子脚本。这可能是问题所在吗?我注意到子进程将不会执行。在我的子脚本中我有这段代码

const { IgApiClient } = require('instagram-private-api');
const chalk = require('chalk');

console.log(chalk.magenta('Starting child script'));

const ig = new IgApiClient();

console.log(process.argv);

我该如何解决?

最佳答案

如果你想在子进程中执行 Node 二进制文件,最好引用它的完整路径,你可以用 process.execPath 找到它

这应该可以解决您的问题

child(process.execPath, [script], {
        cwd: __dirname,
        env: {
            TEST_USERNAME: 'myuser',
            TEST_PASSWORD: 'mypassword'
        }
    }).on('error', (error) => {
        console.log(error);
    });

关于node.js - nodejs 子进程 - 错误 : spawn node ENOENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66678389/

相关文章:

node.js - 什么是更好的方法 : serving static files with Express or nginx?

node.js - Rest API - 如何以正确的方式提供数据

python - 使用命名参数从 Node.js (child_process) 运行 python 脚本

c - 为什么子运行时出现负数?

c - 为什么长时间运行的程序总是要收割它们的僵尸 child ?

node.js - 与nodejs中的child_process共享数据库连接

javascript - MongoDB,聚合 $match 不适用于 ObjectId

javascript - 对象/数组操作

node.js - 如何通过 Node.js -e "evaluate script"命令行开关使用 Unicode 文字

node.js - 来自 AWS Lambda 函数中的 spawn child_process 的 SIGSEGV