我的 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进程的数据。