Javascript 读取等待输入的派生进程的标准输出

Javascript 读取等待输入的派生进程的标准输出,javascript,node.js,spawn,Javascript,Node.js,Spawn,我有一个Swift程序,它在等待\n(终止执行)时将信息记录到标准输出。开始运行后立即请求输入,并在以下时间后1~2秒记录信息: fetchAndLogDataInBackground(); // will print some data in ~1 sec readLine(); 我正在spawning/execFile const spawn = require('child_process').spawn; const process = spawn('swift/main'); p

我有一个Swift程序,它在等待
\n
(终止执行)时将信息记录到
标准输出。开始运行后立即请求输入,并在以下时间后1~2秒记录信息:

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

readLine();
我正在
spawn
ing/
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);
由于我正在('data')
上使用
,所以我希望看到日志“实时”,但它们仅在
process.stdin.write('\n')之后才被处理

有没有办法让数据“活”起来


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

您可能需要禁用标准输出缓冲或手动刷新Swift中的标准输出

要手动刷新,请执行以下操作:

fflush(\uu stdoutp)
要禁用输出缓冲,请执行以下操作:

setbuf(\uu stdoutp,nil);

我不清楚你在期待什么。在我看来,它似乎在正常工作:您的swift程序在读取一行之前不会打印任何内容,而您的意思是,在您为swift程序写入新行之前,您不会获取stdout
“数据”
事件…@msdex我很抱歉!我写了一个错误的片段作为例子:(我编辑了问题来纠正它!)