读取正在等待输入的衍生进程的标准输出

Read stdout of spawned process that is waiting for input

我有一个 Swift 程序,它在等待 \n(终止执行)时将信息记录到 stdout。它在启动 运行ning 后立即请求输入,并在 1~2 秒后记录信息:

fetchAndLogDataInBackground(); // will print some data in ~1 sec

readLine();

我正在spawning/execFile使用以下内容:

const spawn = require('child_process').spawn;

const process = spawn('swift/main');
process.stdout.on('data', data => console.log(data.toString()));

setTimeout(() => {
    process.stdin.write('\n');
}, 5000);

因为我正在使用 on('data'),所以我期待看到日志 "live",但它们仅在 process.stdin.write('\n');

之后才被处理

有什么方法可以获取数据"live"?

PS:如果我在终端 (swift/main) 中 运行 Swift 程序,它会按预期工作。

您可能必须在 Swift 中禁用标准输出缓冲或手动刷新标准输出。

手动冲洗:

fflush(__stdoutp)

要禁用输出缓冲:

setbuf(__stdoutp, nil);