双向 node/python 通信
Bidrectional node/python communication
我正在尝试在节点和生成的 Python 进程之间实现简单的双向通信。
Python:
import sys
for l in sys.stdin:
print "got: %s" % l
节点:
var spawn = require('child_process').spawn;
var child = spawn('python', ['-u', 'ipc.py']);
child.stdout.on('data', function(data){console.log("stdout: " + data)});
var i = 0;
setInterval(function(){
console.log(i);
child.stdin.write("i = " + i++ + "\n");
}, 1000);
在 Python 上使用 -u
强制无缓冲 I/O 所以我希望看到输出(我也尝试过 sys.stdout.flush()
)但没有。我知道我可以使用 child.stdout.end()
但这会阻止我稍后写入数据。
您的 Python 代码在行 TypeError: not all arguments converted during string formatting
处崩溃
print "got: " % l
你应该写
print "got: %s" % l
您可以通过执行以下操作查看 Python 输出的错误:
var child = spawn('python', ['-u', 'ipc.py'],
{ stdio: [ 'pipe', 'pipe', 2 ] });
在 Node.js 上,即仅通过管道传输标准输出,但让标准错误转到 Node 的 stderr。
即使有了这些修复,甚至占 -u
sys.stdin.__iter__
will be buffered。要解决此问题,请改用 .readline
:
for line in iter(sys.stdin.readline, ''):
print "got: %s" % line
sys.stdout.flush()
我正在尝试在节点和生成的 Python 进程之间实现简单的双向通信。
Python:
import sys
for l in sys.stdin:
print "got: %s" % l
节点:
var spawn = require('child_process').spawn;
var child = spawn('python', ['-u', 'ipc.py']);
child.stdout.on('data', function(data){console.log("stdout: " + data)});
var i = 0;
setInterval(function(){
console.log(i);
child.stdin.write("i = " + i++ + "\n");
}, 1000);
在 Python 上使用 -u
强制无缓冲 I/O 所以我希望看到输出(我也尝试过 sys.stdout.flush()
)但没有。我知道我可以使用 child.stdout.end()
但这会阻止我稍后写入数据。
您的 Python 代码在行 TypeError: not all arguments converted during string formatting
处崩溃
print "got: " % l
你应该写
print "got: %s" % l
您可以通过执行以下操作查看 Python 输出的错误:
var child = spawn('python', ['-u', 'ipc.py'],
{ stdio: [ 'pipe', 'pipe', 2 ] });
在 Node.js 上,即仅通过管道传输标准输出,但让标准错误转到 Node 的 stderr。
即使有了这些修复,甚至占 -u
sys.stdin.__iter__
will be buffered。要解决此问题,请改用 .readline
:
for line in iter(sys.stdin.readline, ''):
print "got: %s" % line
sys.stdout.flush()