Estoy tratando de generar un proceso de python (App.py) desde un archivo node.js (index.js).
El script index.js genera el script de python App.py y le pasa un argumento params (un objeto json). App.py luego lee el parameter1 del elemento uParams y envía el valor como un mensaje a index.js.
Sin embargo, cuando ejecuto el script index.js, aparece el error JSONDecodeError("Expecting value", s, err.value) from None .
Traté de reemplazar json.loads(sys.argv[1]) con sys.argv[1] pero al ejecutarlo me da el error TypeError: string indices must be integers .
¿Formateé incorrectamente el objeto JSON 'params' en index.js ?
¿Podría ayudarme a detectar el problema?
¡Gracias por adelantado!
índice.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()); });Aplicación.py:
import sys, json params = json.loads(sys.argv[1]) print(params['uParams'][0]['parameter1']) sys.stdout.flush()Tienes que codificar tu objeto JSON con JSON.stringify .
const pythonProcess = spawn('python',['./App.py', JSON.stringify(params)]); Francamente, me sorprende que spawn no se queje de que solo acepta argumentos de cadena, pero debe estar llamando a toString en su objeto, por lo que solo está pasando [object Object] .
> ({foo:'bar'}).toString() '[object Object]'