【问题标题】:Unable to get output from child process无法从子进程获取输出
【发布时间】:2015-09-13 00:01:56
【问题描述】:

所以,我有一个简单的应用程序(我写过),它写信给stdout

当我自己运行它时,输出打印得很好。

现在,当我使用节点生成进程时......什么也没有发生(除了一条消息说进程已经完成)

这是我的代码:

var spawn = require('child_process').spawn;
helper = spawn("myApp", []);
helper.stdout.on('data', function(data) { 
    console.log("GOT: " + data);
});
helper.stdout.on('end', function(data) {
    console.log("FINISHED: " + data);
});
helper.on('exit', function(code) {
    console.log("CLOSED!");
});

这是输出:

FINISHED: undefined
CLOSED!

是的,就是这样。

发生了什么事?我错过了什么吗?

【问题讨论】:

  • “结束”事件不会给你任何内容。
  • 当我将 spawn() 更改为 spawn("sh", ["-c", "echo hello world"]) 时,它对我来说效果很好,尽管我在数据之前收到了“关闭”事件。
  • 好吧,end 甚至 确实 着火了。 stdout.on('data',...) 部分不是...
  • 您确定您的应用程序代码正确刷新了其输出缓冲区吗? (不太可能是这种情况,但子进程的东西非常接近底层系统调用的原始包装器。)
  • 嗯...我是吗?这是个好问题。这是一个 Objective-C 终端应用程序,fprintfing 到 stdout... 让我仔细检查一下。

标签: javascript node.js macos process spawn


【解决方案1】:

确保您的 stdio 输出缓冲区在您的应用程序中被刷新:

  fflush(stdout); // or something like that

直接输出到 tty 的缓冲比输出到管道的缓冲少。

【讨论】:

  • @Dr.Kameleon 没问题 - 有趣的机会来使用一些我忘记了我什至知道的东西 :)
  • 问题是我也忘记了。我想有这样的时候,一切都会恢复过来……哈哈。
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2017-11-06
  • 2012-07-18
  • 2020-11-28
  • 2016-11-17
  • 2017-06-29
  • 1970-01-01
  • 2015-01-21
相关资源
最近更新 更多