考虑以下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) 我无法在以下代码中获得任何输出:
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>”,以便稍后可以将某些内容输入到标准输入中。
问题是我在数据事件中什么也没有得到,而且似乎这些事件都没有被触发。