2017-07-13 2 views
0

So kann ich ein Python-Skript ausführen, aber ich habe Probleme, das Python-Skript tatsächlich eine Datei speichern zu lassen. Das Ausführen des Python-Skripts direkt vom Terminal aus funktioniert jedoch beim Erstellen eines Knotenprozesses scheinbar still (die Datei wird nie gespeichert, daher schlägt das Knotenscript fehl). Könnte dies ein Berechtigungs- oder Standortproblem sein, da das Ausführen des Python-Skripts direkt funktioniert?Ausführen eines Python-Skripts vom Knoten und Speichern einer Datei

Ich habe python-shell verwendet, um den Prozess zu erleichtern. Mein aktueller API-Endpunkt ist so etwas wie diese:

router.get('/patientsExport', (req, res) => { 
    const options = { 
     mode: 'text', 
     scriptPath: __dirname, 
    }; 
    PythonShell.run('patientsExport.py', options, err => { 
     if (err) { 
      logger.error(err); 
      throw err; 
     } 
     const filePath = path.join(__dirname, 'patientsExport.xlsx'); 
     fs.exists(filePath, exists => { 
      if (exists) { 
       // Deliver the file 
      } else { 
       res.writeHead(400, { 'Content-Type': 'text/plain' }); 
       res.end('ERROR File does NOT Exists'); 
      } 
     }); 
    }); 
}); 

Ich habe die Position des Skripts in Python mit os.getcwd() geprüft und versuchte, einen sleep Befehl auszuführen sich um sicherzustellen, dass zwischen dem Speicher der Datei genügend Zeit und Knoten es zu finden, aber ohne Erfolg.

wb.save(filename=dest_filename) 
while not exists(dest_filename): 
    sleep(1) 

Hat jemand irgendwelche Erfahrung damit oder weiß, was ich falsch mache?

Antwort

0

Es stellte sich heraus, dass es sich um ein Standortproblem handelte. Die Dateien wurden im Stammverzeichnis des NodeJS-Skripts gespeichert. Ich schaffte es, das Problem zu umgehen, indem die __dirname von Knoten in den Python-Skript vorbei und das aktuelle Arbeitsverzeichnis zu ändern, wie so:

Javascript:

const options = { 
     mode: 'text', 
     scriptPath: __dirname, 
     args: [__dirname], 
    }; 
    PythonShell.run('patientsExport.py', options, err => ... 

Python:

import sys 
from os import chdir 

chdir(sys.argv[1]) if sys.argv[1] else sys.exit() 
Verwandte Themen