从nodejs中执行文件,写入stdin并将stdout传递给文件

时间:2014-01-30 00:16:11

标签: c node.js stream

我有这个程序(用C btw ...编码),我想从我的nodejs服务器中调用它。 我想将一个字符串传递给它的stdin,同时将它的stdout重定向/管道传输到文件中。

我知道process_child有一些方法可以实现这种行为,所以我尝试了:

program = child_process.execFile('program');
fileStream = fs.createWriteStream('file.txt');
program.stdout.pipe(fileStream);    
program.stdin.end('hello world!');

这一行program.stdin.end("...")会引发一些错误。

应该像echo "hellow world!" | ./program > file.txt

//$ cat program.c
#include <stdio.h>

int main() {
    char aux[100];

    scanf("%s", aux);
    printf("[%s]", aux);

    return 0;
}

更新

使用'./program'代替'program'解决了部分问题。

更新2

使用'hellow world!\r\n'或file.txt只是空的。 但我的程序不读\ n,它使用%s读取。 据我所知,它会读到\ n或EOF。 例如,echo -n "mimimi" | ./test有效(stdin中没有\ n)

1 个答案:

答案 0 :(得分:2)

这对我有用......

我用于测试的脚本(名为flux)是:

#!/bin/bash

while read x ; do echo $x ; done

代码需要换行

var child_process = require('child_process');
var fs = require('fs');

program = child_process.execFile('./flux');
fileStream = fs.createWriteStream('file.txt');
program.stdout.pipe(fileStream);
program.stdin.end("hello world!\r\n");