Я пытаюсь создать процесс Python (App.py) из файла node.js (index.js).
Скрипт index.js
порождает скрипт python App.py
и передает ему аргумент params
(объект json). Затем App.py
считывает элемент uParams
parameter1
и отправляет значение в виде сообщения обратно в index.js.
Однако, когда я запускаю скрипт index.js, я получаю сообщение об ошибке JSONDecodeError("Expecting value", s, err.value) from None
.
Я пытался заменить json.loads(sys.argv[1])
на sys.argv[1]
, но при запуске выдает ошибку TypeError: string indices must be integers
.
Я неправильно отформатировал JSON-объект params в index.js
?
Не могли бы вы помочь мне определить проблему?
Заранее спасибо!
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.info(data.toString());
});
App.py:
import sys, json
params = json.loads(sys.argv[1])
print(params['uParams'][0]['parameter1'])
sys.stdout.flush()
🤔 А знаете ли вы, что...
JavaScript активно развивается, и новые версии языка регулярно включают новые функции и улучшения.
Вы должны преобразовать свой объект JSON в строку с помощью JSON.stringify
.
const pythonProcess = spawn('python',['./App.py', JSON.stringify(params)]);
Честно говоря, я удивлен, что spawn
не жалуется, что принимает только строковые аргументы, но он должен вызывать toString
для вашего объекта, поэтому вы просто передаете [object Object]
.
> ({foo:'bar'}).toString()
'[object Object]'