我在 Windows 上使用 spawn 设置了一个简单的脚本,它的输出是:
spawn error: Error: spawn dir ENOENT
spawn child process closed with code -4058
代码如下:
const spawn = require('child_process').spawn;
const spawnTest = (() => {
const dir = spawn('dir');
dir.stdout.on('data', (data) => {
console.log(`spawn stdout: ${data}`);
});
dir.stderr.on('data', (data) => {
console.log(`spawn stderr: ${data}`);
});
dir.on('error', (code) => {
console.log(`spawn error: ${code}`);
});
dir.on('close', (code) => {
console.log(`spawn child process closed with code ${code}`);
});
dir.on('exit', (code) => {
console.log(`spawn child process exited with code ${code}`);
});
})();
最佳答案
您需要 spawn()
的 shell: true
选项,如 spawn('dir', {shell: true});
.
此代码在 Windows 上按预期工作:
const spawn = require('child_process').spawn;
const spawnTest = (() => {
const dir = spawn('dir', {shell: true}); // <== shell: true option
dir.stdout.on('data', (data) => {
console.log(`spawn stdout: ${data}`);
});
dir.stderr.on('data', (data) => {
console.log(`spawn stderr: ${data}`);
});
dir.on('error', (code) => {
console.log(`spawn error: ${code}`);
});
dir.on('close', (code) => {
console.log(`spawn child process closed with code ${code}`);
});
dir.on('exit', (code) => {
console.log(`spawn child process exited with code ${code}`);
});
})();
我的猜测是因为 dir
不是一个实际的程序(在 Windows 中没有 dir.exe
),你必须告诉 spawn()
命令是否应该在命令 shell 中或没有命令 shell 的情况下运行它。而在其他平台上,诸如 ls
之类的东西是可以以任何一种方式运行的实际程序。
关于node.js - Node 生成子进程在 Windows 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60386867/