pipe道不被subprocess读取?

我想运行node.js作为一个subprocess并为其提供input。 使用C,这里是我的一些示例代码。

我遇到的问题是,尽pipesubprocess的stdout仍然是针对terminal的,但是在给subprocess标准input一个'Hello World'行后,我什么也看不到。 即使我()pipe道,我没有看到输出。 但是,如果我closures了pipe道的input,那么terminal上会出现“Hello World”。

subprocess似乎只是缓冲 – 为什么呢? 我想最终将subprocessstdoutredirect到另一个pipe道,并从main()中读取它。

int main(int argc,char * argv []){

int toNode[2]; pipe(toNode); pid_t child_pid = fork(); if (child_pid == 0) { // child // close write end close(toNode[1]); // connect read end to stdin dup2(toNode[0], STDIN_FILENO); // run node executable char* arg_list[] = { "/usr/bin/node", NULL}; execvp(arg_list[0], arg_list); fprintf(stderr, "process failed to start: %s\n", strerror(errno)); abort(); } else { // parent FILE* stream; // close read end close(toNode[0]); // convert write fd to FILE object stream = fdopen(toNode[1], "w"); fprintf(stream, "console.log('Hello World');\n"); fflush(stream); //close(toNode[1]); waitpid(child_pid, NULL, 0); } return 0; } 

正在读取的pipe道没有问题。 问题在于,如果/usr/bin/node检测到stdin是交互式的,则默认情况下它只会调用REPL(read-eval-print loop)。 如果你有一个最新版本的nodejs ,那么你可以提供-i--interactive命令行标志,但是这样做不仅仅是在读取每行时执行。 它也将充当控制台,包括将ANSI颜色序列插入输出并打印每个expression式的值。

看到这个论坛主题了解更多信息。