Цикл дочернего процесса Python через стандартный ввод из родительского процесса Node.js. - PullRequest
0 голосов
/ 16 февраля 2019

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.

...