相关疑难解决方法(0)

node.js使用单独的stdout和stderr流以交互方式生成子进程

考虑以下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);
}
Run Code Online (Sandbox Code Playgroud)

哪个应该打印一行到stdout,一行到stderr,然后等待用户输入,然后另一行到stdout,另一行到stderr.非常基本!在编译并在命令行上运行时,程序的输出完成(收到getchar()的用户输入):

$ ./test 
string out 1
string err 1

string out 2
string err 2
Run Code Online (Sandbox Code Playgroud)

尝试使用带有以下代码的nodejs将此程序生成为子进程时:

var TEST_EXEC = './test';

var spawn = require('child_process').spawn;
var test = spawn(TEST_EXEC);

test.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

test.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

// Simulate entering data for getchar() after 1 second
setTimeout(function() { …
Run Code Online (Sandbox Code Playgroud)

stdout spawn unbuffered node.js

13
推荐指数
2
解决办法
1万
查看次数

无法使用交互式脚本获取 child_process.spawn 的输出

我无法在以下代码中获得任何输出:

var spawn = require('child_process').spawn,
    script = 'ftp',
    child = spawn(script);

child.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

child.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

child.on('close', function (code) {
  console.log('child process exited with code ' + code);
});
Run Code Online (Sandbox Code Playgroud)

它适用于普通脚本,如“ls”、“pwd”等。但不适用于交互式程序,如“ftp”、“telnet”。有什么建议么?


编辑:

以另一个脚本为例:

#!/usr/bin/env python
name = raw_input("your name>")
print name
Run Code Online (Sandbox Code Playgroud)

当生成此脚本时,我希望使用数据事件获取提示“your name>”,以便稍后可以将某些内容输入到标准输入中。

问题是我在数据事件中什么也没有得到,而且似乎这些事件都没有被触发。

spawn child-process node.js

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

标签 统计

node.js ×2

spawn ×2

child-process ×1

stdout ×1

unbuffered ×1