Estoy tratando de llamar y ejecutar un script de python a través del siguiente código javascript en una aplicación electronjs
function getProgramstatus(){ const { exec } = require('child_process'); exec('python python\\getProgramstatus.py', (error, stdout, stderr) => { }); let jsonData = require('.\\js\\programstatus.json'); let itemData = JSON.stringify(jsonData); let programstatus = JSON.parse(itemData); sessionStorage.setItem('programstatus check', programstatus.status); }El objetivo del script de python es escribir un valor en un archivo json.
data1={ "status": "12", "time" : time.ctime(start) } json_object = json.dumps( data1, indent = 4) with open('..\js\programstatus.json', 'w') as outfile: outfile.write(json_object) #print("2") sys.exit("2")Cuando ejecuto el script de python a través de la terminal, escribe en el archivo json, pero cuando lo llamo desde javascript, no escribe en el archivo json. Algunas ideas;
Intente generar la respuesta para obtener sugerencias, como esta:
function getProgramstatus(){ const { exec } = require('child_process'); exec('python python\\getProgramstatus.py', (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`stdout: ${stdout}`); console.error(`stderr: ${stderr}`); }); let jsonData = require('.\\js\\programstatus.json'); let itemData = JSON.stringify(jsonData); let programstatus = JSON.parse(itemData); sessionStorage.setItem('programstatus check', programstatus.status); }Y por favor comparte la salida.
Además, la ejecución del código continúa mientras getProgramstatus.py aún se está ejecutando, desea usar execSync/mover el código debajo de exec dentro de la devolución de llamada o crear una promesa, de modo que let jsonData = require('.\\js\\programstatus.json'); se ejecuta cuando el script de python ha terminado.
Encontré la respuesta, por qué el archivo json no se escribió cuando la aplicación llamó al script de python y no yo en la terminal.
El problema es la ubicación de la carpeta/archivo. Debe ser relativo a main.js de la aplicación de electrones.
Así que cambié lo siguiente:
with open('..\js\programstatus.json', 'w') as outfile: outfile.write(json_object)Para: con open('.\js\programstatus.json', 'w') como archivo de salida: outfile.write(json_object)
y funciona bien.