我有一個node.js腳本啓動python子流程並讀取它的stdout。只要python進程不嘗試從標準輸入讀取,它就會工作。然後父進程不會從孩子那裏得到任何東西。Node.js讀取標準輸入時無法讀取python子流程stdout
我有node.js的腳本。我們兩個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(',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