Articles of stdout

当从C#调用Edge.js时,如何钩住stdout和stderr?

背景 我正在通过Process.Start()运行Node的C#程序。 我从这个subprocess捕获stdout和stderr,并根据我自己的原因redirect它。 我正在考虑用一个调用Edge.js代替Node.exe的调用。 为了能够做到这一点,我必须能够可靠地捕获在Edge中运行的Javascript的标准输出和标准错误,并将消息传回到我的C#应用​​程序中。 方法1 我会描述这种方法的完整性,以防有人推荐它:) 如果Edge进程终止,则只需简单地声明一个msgs数组,并用新的函数覆盖process.stdout.write和process.stderr.write来处理这个问题是相当容易的,这些函数会在该数组上累积消息,最后只需返回消息数组。 例: var msgs = []; process.stdout.write = function (string) { msgs.push({ stream: 'o', message : string }); }; process.stderr.write = function (string) { msgs.push({ stream: 'e', message: string }); }; // Return to caller. var result = { messages: msgs; …other stuff… }; callback(null, result); 显然这只有在Edge代码终止的情况下才有效,在最坏的情况下,消息可能会变大。 但是,它很可能会performance良好,因为只有一个编组调用才能获取所有消息。 […]

NodeJSsubprocess标准输出都是数字

我正在写一些node.js脚本来启动一个subprocess。 代码片段如下。 var spawn = require('child_process').spawn; var child = spawn ('node', ['script.js']) child.stdout.on('data', function (data) { logger.verbose('tail output: ' + JSON.stringify(data)); } ); child.stderr.on('data', function (data) { logger.error('err data: ' + data); } ); 脚本运行良好,除了subprocess的stdout和stderr仅输出数字输出: 示例输出: 108,34,44,34,105,110,99,114,101,97,109,101,110,116,97,108,95,112,111,108,108,105 如何将这些数值转换为可读的string? 谢谢。

node.js child_process.spawn没有标准输出,除非“inheritance”

我试图从node.js (0.10.29)捕获spawn child_process stdout。 现在我只是试着用ping 下面的代码不打印(但是ping) var exec = require('child_process').exec; var spawn = require('child_process').spawn; var util = require('util') var ping = spawn('ping', ['127.0.0.1'], {stdio: 'pipe'}); ping.stdout.on('data', function(data){ util.print(data); }) ping.stderr.on('data', function(data){ util.print(data); }) 如果我改变stdio: 'pipe'到stdio: 'inherit'并摆脱stdout/stderr钩子如下: var ping = spawn('ping', ['127.0.0.2'], {stdio: 'inherit'}); // ping.stdout.on('data', function(data){ // util.print(data); // }) // ping.stderr.on('data', function(data){ // util.print(data); […]

NodeJS产生标准输出string格式

我在节点中产生一个进程,跟踪这个命令的输出: proc.stdout.on("data", function (data) { console.log(data.toString()); }); 它运作良好,但是,输出似乎是分裂的线路: npm http 304 https://registry.npmjs.org/underscore 以上只是npm install响应的一行。 通常情况下,这一切都在一行中,这也是在响应之前和之后添加换行符。 有没有办法让数据输出看起来像标准运行,即逐行?

在脱壳节点时保留输出颜色

我有一个小Grunt任务,通过节点popup,并运行“composer php安装”。 var done = this.async(); var exec = require('child_process').exec; var composer = exec( 'php bin/composer.phar install', function(error, stdout, stderr) { done(error===null); } ); composer.stdout.on( 'data', grunt.log.write ); 正如你所看到的,我将这个subprocess的stdout输出到grunt.log。 除了输出全部以我的默认控制台颜色显示之外,所有的输出都如预期般显示出色。 如果我直接运行“composer php安装”,我会突出显示,提高可读性。 由于我对节点,Grunt以及一般情况下的新手很陌生,因此我不确定系统的哪个部分颜色会丢失,甚至不知道如何高效地进行debugging。

Node.js child_process exec的标准输出被缩短

在Node.js中,我使用了child_process模块​​的exec命令来调用Java中的一个algorithm,该algorithm返回大量的文本,然后parsing和使用。 我能够捕捉它,但是当它超过一定数量的行,内容被截断。 exec("sh target/bin/solver "+fields.dimx+" "+fields.dimy, function(error, stdout, stderr){ //do stuff with stdout } 我已经尝试过使用setTimeouts和callback,但没有成功,但我确实感到这是因为我引用标准输出之前,它可以完全检索我的代码。 我已经testing过,stdout实际上是数据丢失首先发生的地方。 这不是一个asynchronous的问题。 我也在我的本地机器和Heroku上testing过,并且发生完全相同的问题,每次都在同一行号码处截断。 任何想法或build议可能有助于这个?

node.js使用单独的stdout和stderrstream交互式产生一个subprocess

考虑下面的C程序(test.c): #include <stdio.h> int main() { printf("string out 1\n"); fprintf(stderr, "string err 1\n"); getchar(); printf("string out 2\n"); fprintf(stderr, "string err 2\n"); fclose(stdout); } 哪一个应该打印一行stdout,一行stderr,然后等待用户input,然后另一行stdout和另一行stderr。 非常基本! 在编译并在命令行上运行时,程序输出完成时(用户input为getchar()): $ ./test string out 1 string err 1 string out 2 string err 2 当试图用下面的代码使用nodejs产生这个程序作为subprocess时: var TEST_EXEC = './test'; var spawn = require('child_process').spawn; var test = spawn(TEST_EXEC); test.stdout.on('data', function […]

错误:在pipe道节点输出为“|”时写入EPIPE 头”

我遇到了错误: events.js:48 throw arguments[1]; // Unhandled 'error' event ^ Error: write EPIPE at errnoException (net.js:670:11) at Object.afterWrite [as oncomplete] (net.js:503:19) 当pipe道输出到头。 一个简单的例子是: console.log('some string'); … the same for 20 lines 然后node test.js | head node test.js | head得到错误,这似乎出现在Ubuntu 12.04运行约70%。 有什么问题?