Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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?


  • Moderators

    hi @NotYourFan

    welches Betriebssystem?



  • hi @J-Hilk
    Windows 10

    Edit:
    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);
    

  • Moderators

    @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?


  • Moderators

    @NotYourFan

    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:

    1. Process started!
    2. Error occurred "Process crashed"
    3. OUT ""
    4. 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


  • Qt Champions 2019

    @NotYourFan Funktioniert dein Script wenn du ihn direkt ausführst?



  • Ja das tut es komischerweise ohne Probleme.


Log in to reply