我正试图从node.js文件(index.js(中生成一个python进程(App.py(。
脚本index.js
生成python脚本App.py
,并向其传递参数params
(json对象(。App.py
然后读取uParams
元素parameter1
,并将该值作为消息发送回index.js.
然而,当我运行index.js脚本时,我得到了错误JSONDecodeError("Expecting value", s, err.value) from None
。
我试图用sys.argv[1]
替换json.loads(sys.argv[1])
,但运行它会出现错误TypeError: string indices must be integers
。
我是否错误地格式化了index.js
中的"params"JSON对象?
你能帮我找出问题吗?
提前感谢!
index.js:
const spawn = require("child_process").spawn;
let params = {
"type":"numbers",
"lang":"js",
"uParams":[{
"parameter1":1,
"parameter2":2,
"parameter3":3
}]
}
const pythonProcess = spawn('python',['./App.py', params]);
pythonProcess.stdout.on('data', (data)=>{
console.log(data.toString());
});
应用程序:
import sys, json
params = json.loads(sys.argv[1])
print(params['uParams'][0]['parameter1'])
sys.stdout.flush()
您必须使用JSON.stringify
字符串化JSON对象。
const pythonProcess = spawn('python',['./App.py', JSON.stringify(params)]);
坦率地说,我很惊讶spawn
并没有抱怨它只接受字符串参数,但它一定是在对象上调用toString
,所以你只是在传递[object Object]
。
> ({foo:'bar'}).toString()
'[object Object]'