Python子进程通过Node.js父进程的stdin循环

时间:2019-02-16 16:16:05

标签: python node.js pipe

我的 Node.js 父程序执行一个子 Python 进程并向其发送文本数据-有关实现,请参见here。这项工作正常,节点父进程将数据写入为:

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);

这将在第二次执行时由于Error [ERR_STREAM_WRITE_AFTER_END]: write after end调用而导致end()错误。如果省略child.stdin.end();,我将得到任何输出。 根据{{​​3}} 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进程的数据。

0 个答案:

没有答案