到目前为止,我正在使用内置的数据启动Python脚本,并侦听通过stdout.on(' data ',(data))返回的任何数据,就像第一个JS代码的第6行一样。但从我做过的谷歌搜索中,我只看到了传回一件事情或传回一组事情的例子,所有这些事情都聚集在一起。我想知道是否有可能发回不止一个参数。下面是我的代码:
JS:
const spawn = require('child_process').spawn;
pythonProcess = spawn('python', ["/path/to/python/file"]);
pythonProcess.stdout.on('data', (data) => {
console.log(data);
});
Python:
import sys
var thing1 = "Cold";
var thing2 = "Hot";
var thing3 = "Warm";
print(thing1);
print(thing2);
print(thing3);
sys.stdout.flush();
但是我想要发生的可能是回传一些类似数组的东西,它填充了我想要发回的东西,这样我就可以在JS文件中访问它们,如下所示:
const spawn = require('child_process').spawn;
pythonProcess = spawn('python', ["/path/to/python/file"]);
pythonProcess.stdout.on('data', (data) => {
thing1 = data[0];
thing2 = data[1];
thing3 = data[2];
})
console.log('thing1: ' + thing1);
console.log('thing2: ' + thing2);
console.log('thing3: ' + thing3);
这将输出:
thing1: Hot
thing2: Cold
thing3: Warm
我该怎么做呢?
提前感谢!
发布于 2018-07-16 05:27:02
在Node.js和Python之间没有直接通信的接口,所以你不能传递自定义参数,你所做的只是使用child_process
执行python程序,所以你不需要发送参数,在'data'
上接收的任何东西,都是从python打印到stdout
的。
因此,您需要做的是序列化数据,然后在节点中对其进行反序列化,您可以使用JSON
来实现这一点。
从python脚本中,输出以下JSON
对象:
{
"thing1": "Hot",
"thing2": "Cold",
"thing3": "Warm"
}
在您的Node.js脚本中:
const spawn = require('child_process').spawn;
const pythonProcess = spawn('python', ["/path/to/python/file"]);
const chunks = [];
pythonProcess.stdout.on('data', chunk => chunks.push(chunk));
pythonProcess.stdout.on('end', () => {
try {
// If JSON handle the data
const data = JSON.parse(Buffer.concat(chunks).toString());
console.log(data);
// {
// "thing1": "Hot",
// "thing2": "Cold",
// "thing3": "Warm"
// }
} catch (e) {
// Handle the error
console.log(result);
}
});
请记住,data
是分块的,因此在解析JSON
之前必须等待end
事件被激发,否则将触发SyntaxError
。(Sending JSON from Python to Node via child_process gets truncated if too long, how to fix?)
你可以使用任何你觉得舒服的序列化类型,JSON
是最简单的,因为我们用的是javascript。
注意,stdout
是一个流,所以它是异步的,这就是为什么你的例子永远不会工作。
pythonProcess.stdout.on('data', (data) => {
thing1 = data[0];
thing2 = data[1];
thing3 = data[2];
})
// Things do not exist here yet
console.log('thing1: ' + thing1);
console.log('thing2: ' + thing2);
console.log('thing3: ' + thing3);
https://stackoverflow.com/questions/51352274
复制相似问题