12

次のような子プロセスを生成します。

var child = require('child_process');
var proc = child.spawn('python', ['my_script.py', '-p', 'example']);

また、いくつかのデータ処理を設定しました。

proc.stdin.setEncoding('utf8');
proc.stdout.setEncoding('utf8');
proc.stderr.setEncoding('utf8');

proc.stdout.on('data', function (data) {
  console.log('out: ' + data);
});

proc.stderr.on('data', function (data) {
  console.log('err: ' + data);
});

proc.on('close', function (code) {
  console.log('subprocess exited with status ' + code);
  proc.stdin.end();
});

私の Python スクリプトは から行を読み取りstdin、各行に対していくつかの操作を行い、に出力しstdoutます。シェルでは問題なく動作しますが(行を書くとすぐに出力が得られます)、ノードでこれを行うと:

for (var i = 0; i < 10; i++) {
  proc.stdin.write('THIS IS A TEST\n');
}

私は何も得ません。

呼び出しを修正する必要がありましproc.stdin.end()たが、それにより子プロセスも終了します(バックグラウンドにとどまり、データをストリーミングしたい)。

また、バッファを大量の書き込みで満たすフラッシュをトリガーしましたが、それは実際にはオプションではありません。

ストリームを手動でフラッシュする方法はありますか?

4

1 に答える 1

4

print ステートメントの後に Python からの出力をフラッシュしていません。同様の問題があり、@Alfeが私の質問に答えました。これを見てください:

子プロセスの出力をフロー モードでストリーミングする

于 2013-09-17T12:19:59.117 に答える