相关疑难解决方法(0)

如何在Windows上正确使用node.js child_process.spawn()重定向?

我有一个干净的Windows 8.1框,安装了lates node.js(v0.10.29).我在两个文件中有以下测试代码:

a.js

var sub = require('child_process').spawn('node', ['b.js'], {silent: true});
sub.stdout.on("data", function (data) {console.log(data.toString());});
Run Code Online (Sandbox Code Playgroud)

b.js

console.log("DEBUG 1");
console.log("DEBUG 2");
process.exit();
Run Code Online (Sandbox Code Playgroud)

如果我a.ja通过执行:

node a.js
Run Code Online (Sandbox Code Playgroud)

我将在控制台输出中看到"DEBUG 1" - 但不是"DEBUG 2".如果我删除process.exit(),两行将正确显示.这种奇怪的行为发生在forkspawn.

任何提示?相同的代码在linux上没有问题.

更新02.07.2014

似乎这不是exit()和log()之间的竞争条件,因为将其更改为纯序列会产生相同的错误:

function print(text, next) { console.log(text); next(); }
print("DEBUG 1", function () {
  print("DEBUG 2", function () {
    process.exit();
  });
});
Run Code Online (Sandbox Code Playgroud)

更新03.07.2014

silent未列在spawn()文档中,但它有效.它列在fork文档中,正如我之前提到的,这个问题与之相同fork.

似乎如果我在上一次输出和process.exit()所有工作之间引入延迟正确:

console.log("DEBUG 1");
console.log("DEBUG 2");
setTimeout(function () {process.exit();}, 10000); …
Run Code Online (Sandbox Code Playgroud)

node.js

5
推荐指数
1
解决办法
1228
查看次数

标签 统计

node.js ×1