2016-09-01 14 views
4

私は\n(実行を終了する)を待つ間にstdoutに情報を記録するSwiftプログラムを持っています。これは、スタートランニング直後の入力を要求し、情報1〜2秒後に記録されます:私はspawnはとそれをINGの/ execFileをINGのだ入力を待っている生成プロセスのstdoutを読む

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

readLine(); 

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')を使用しているため「ログ」がライブに記録されますが、処理が完了するのはprocess.stdin.write('\n');です。

データを「ライブ」にする方法はありますか?

PS:Swiftプログラムを端末(swift/main)で実行すると、期待どおりに動作します。

+0

それはあなたが期待しているものを私に明確ではありません。私には、それはすべきであるように思える:あなたの素早いプログラムは、行を読むまでは何も印刷せず、あなたがswiftプログラムに新しい行を書くまでstdoutの '' data''イベントを得ないと言っている... – mscdex

+0

@mscdex申し訳ありません!私は例として間違ったスニペットを書いた:(私はそれを修正するために質問を編集しました!:) – Matheus

答えて

2

Swiftでstdoutバッファリングを無効にするか、手動でstdoutをフラッシュする必要があります。

を手動でフラッシュ:

fflush(__stdoutp) 

は、出力バッファリングを無効にするには:

setbuf(__stdoutp, nil); 
+0

ありがとうございました! :) – Matheus

関連する問題