Python-Script ausführen
-
Hey,
ich würde gerne nach einem Button-click ein Python Skript ausführen.
Dieses Skript erzeugt eine JSON-Datei und speichert mir diese in D:
Folgendes habe ich probiert:void TestWindow::loadFile() QProcess p; QStringList params; params << "createJSON.py"; p.start("python", params); p.waitForFinished(-1); QString p_stdout = p.readAll();
Leider wird das Skript nicht ausgeführt (meine JSON-Datei wird nicht aktualisiert)
Sieht jemand meinen Fehler ? bzw. weis weshalb mein Code nicht funktioniert? -
hi @NotYourFan
welches Betriebssystem?
-
hi @J-Hilk
Windows 10Edit:
Folgendes habe ich ebne auch nochmal im Internet gefunden und versucht, leider ohne Erfolg:QProcess process; process.setWorkingDirectory("C:/Users/…/Desktop/Project"); process.setProgram("creatJSON.py"); process.start("createJSON.py"); process.waitForFinished(1000);
-
@NotYourFan
Ich bin keine Experte für Win10&QProcess aber ich bin mir ziemlich sicher das du die Endung exe nicht unterschlagen darfst beim Programm Aufruf -
wo bzw. welche Endung mit .exe?
-
p.start("python.exe", params);
und das ist unter der vorraussetzung das Python in deiner Path variable hinterlegt ist!
Wenn nicht, wird das auch nicht gefunden/ausgeführt
du solltest auf das error signal achten und auswerten
https://doc.qt.io/qt-5/qprocess.html#errorOccurred -
Hey,
eben Python als Umgebnungsvariable angelegt (Wenn ich CMD-Öffne --> "python --Version" eingebe, dann erhalte ich 3.7.3) also funktioniert die Umgebungsvariable.
Leider hat es auch mit deinem Vorschlag ( @J-Hilk ) nicht funktioniert. -
Hey,
eben folgendes Probiert um die Fehlersuche einzugrenzen:
QProcess p; QStringList params; params << "C:/Users/.../Desktop/test.py"; QObject::connect(&p, &QProcess::started, []() { qInfo() << "Process started!"; }); QObject::connect(&p, &QProcess::errorOccurred, [&p]() { qWarning() << "Error occurred" << p.errorString(); }); p.start("python.exe", params); p.waitForFinished(-1); QString p_stdout = p.readAllStandardOutput(); QString p_stderr = p.readAllStandardError(); qDebug() << "OUT" << p_stdout; qDebug() << "ERR" << p_stderr;
Ausgabe:
- Process started!
- Error occurred "Process crashed"
- OUT ""
- ERR "Fatal Python error: initfsencoding: unable to load the file system codec\nModuleNotFoundError: No module named 'encodings'\n\nCurrent thread 0x00005b50 (most recent call first):\n"
Hab eben auch nach "No module named 'encodings' "gegoogelt" aber leider nicht schlauer geworden. Vielleicht kennt sich ja jemand von euch damit aus :D
-
@NotYourFan Funktioniert dein Script wenn du ihn direkt ausführst?
-
Ja das tut es komischerweise ohne Probleme.