我编写了一个由我的Node.js服务器运行的程序,用于与python脚本(源:https://github.com/extrabacon/python-shell)进行交互,该脚本成功地将数据发送到脚本并接收返回的值。
返回的内容(message)
(在pyshell.on
中)是json
,它只显示为传入函数的本地,但我想在我的程序之外的其他地方使用此数据功能。
刚接触javascript我最初尝试将ret_val = message;
设置为无效,尝试将类型(python端)更改为字符串(仍未成功),最后将json转换为字符串并解析为ret_val (现在是)ret_val = JSON.parse(JSON.stringify(message));
。遗憾的是,这些方法都不起作用,因为ret_val仍未定义,尽管消息明确包含我需要的数据作为对象(使用typeof检查)。我想知道将message
变量的内容复制到ret_val
以便稍后返回的正确方法,或者如果我使用的话,可能是获取message
数据的正确方法这个模块不正确。
见下面的日志
更新:设置run_py_script
时,功能ret_val
中会出现包含问题的完整脚本。
var express = require('express');
var router = express.Router();
var PythonShell = require('python-shell');
var options = {
mode: 'json'
};
var rain_data;
function run_py_script(data, callback){
var pyshell = new PythonShell('dummy.py', options);
var ret_val;
pyshell.send("dummy data"); // change to data
pyshell.on('message', function(message){
console.log(message);
rev_val = message;
//console.log(ret_val["willCollide"]);
});
pyshell.end(function(err){
if (err) {
console.log("hi");
}
return err ? callback(null) : callback(null, ret_val);
});
}
/* GET rain_track data. */
router.get('/', function(req, res, next) {
run_py_script(null, function(err, rain_data) {
console.log(err);
console.log(rain_data);
if (err){ console.log("error in python script" ); return res.json(null); }
if (rain_data == null){
console.log("Error: data is null or undefined");
}
res.json(rain_data);
})
});
module.exports = router;
日志:
{ willCollide: 1, time: 6000, strength: 'NA' }
null
undefined
Error: data is null or undefined
GET /rain_track 200 62.778 ms - -