私はpythonサブプロセスを開始し、stdoutを読み込むnode.jsスクリプトを持っています。これは、pythonプロセスがstdinからの読み込みを試みない限り機能します。親プロセスは子プロセスから何も取得しません。Node.jsはstdinから読み込んだときにpythonサブプロセスstdoutを読み取ることができません
私はここにNode.jsのスクリプトと2 Pythonのテストケースがあります(あなたが標準入力からの読み取りを試みる行をコメントする場合は、両方の例が動作する)
最初の子:
import sys
print('before')
for line in sys.stdin:
print(line)
print('after')
第二子を:
import sys
print('before')
while True:
line = sys.stdin.readline()
if line != '':
print(line)
else:
break
print('after')
親:
const spawn = require('child_process').spawn;
let client = spawn('python', ['test1.py'], {cwd: '/tmp'});
client.stdout.on('data', (data) => {
console.log(data.toString());
});
client.stderr.on('data', (data) => {
console.log(data.toString());
});
client.on('close',() => {
console.log('close');
});
client.on('exit',() => {
console.log('exit');
});
client.on('disconnect',() => {
console.log('disconnect');
})
node.jsは分かりませんが、pythonの観点からは、行が書き込まれますが、ttyではなくパイプであるため、より多くのデータを待ってバッファされます。すぐに送るには、 'print( 'before'、flush = True)'を実行することができます。その後、データを待っています。まあ...データを送信する必要があります。 – tdelaney
'flush = True'トリックが問題を解決しました。これを回答として投稿すると私はそれを受け入れるでしょう:) – Martin
これを 'node.js'側で' const spawn = require( 'pty.js')。spawn; 'のようなもので修正する方が良いかもしれません。 stdout/errストリームを分割する方法について説明しています。http://stackoverflow.com/questions/15339379/node-js-spawning-a-child-process-interactively-with-separate-stdout-and-stderr-s私は答えを提供して満足しています...しかし、私はその最高の答えはよく分かりません。 – tdelaney