My Node.js родительская программа выполняет дочерний Python процесс и отправляет ему текстовые данные - см. здесь для реализации.Это работает нормально, родительский процесс узла записывает данные следующим образом:
child.stdin.setEncoding('utf-8');
child.stdin.write(data + '\r\n');
child.stdin.end();
дочерний процесс Python возвращает его обратно:
for line in sys.stdin:
ofp.write(line)
и возвращает данные родительскому процессу:
child.stdout.on('data', function (_data) {
var data = Buffer.from(_data, 'utf-8').toString().trim();
res += data;
});
Я хочу, чтобы мой родительский процесс разветвлял один раз дочерний процесс и выполнял последующие вызовы child.stdin.write();
без закрытия потока.Если в родительском процессе мне нравится
setInterval(() => {
child.stdin.write(data + '\r\n');
child.stdin.end();
}, 1000);
, то при втором выполнении из-за вызова end()
произойдет ошибка Error [ERR_STREAM_WRITE_AFTER_END]: write after end
.Хотя, если я опущу child.stdin.end();
, я получу любой вывод.Согласно здесь sys.stdin.readline
будет читать построчно до Ctrl + D
def read_stdin():
readline = sys.stdin.readline()
while readline:
yield readline
readline = sys.stdin.readline()
for line in read_stdin():
ofp.write(line)
другой подход был
for line in iter(sys.stdin.readline, ''):
print line
В обоих случаях я не получаю данные обратно в родительский процесс Node.