Jump to content
Ultimaker Community of 3D Printing Experts

Python Script debuggen


jumbo125
 Share

Recommended Posts

Posted (edited) · Python Script debuggen

Hallo zusammen

 

ich bin noch etwas neu im Python/Cura Post-Processing Script entwerfen.

Nun ist es immer sehr mühsam, nach dem schreiben des scripts, dieses zu überprüfen.

Bis jetzt habe ich immer cura neu gestartet, das script ausgeführt und getestet bzw. bei Fehlern die .log Datei von Cura angesehen.

 

Geht das auch einfacher? super wäre es, wenn man ohne jedesmal Cura starten zu müssen, dass script testen kann.

ist das möglich? oder zumindest einen "super-schnell" start zu erwirken. Das lange warten, bis cura geladen ist, dauert am längsten.

ich bin für jede hilfe dankbar.

Edited by jumbo125
  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Hallo Jumbo,

     

    Leider mache ich das genau so

    Ich habe mal gelesen das man Cura auch über Befehlszeile ("CMD") starten kann aber ob das bei der akt. Cura Version war oder noch mit der alten Cura V15. weiß ich nicht mehr. Kann mir das nämlich schwer vorstellen bei den ganzen möglich Einstellungen Pluginn etc.

     

    Du wirst ja auch schon ein Python Explorer verwenden, grobe Fehler werden so schon mal verbessert

     

    Mit z.B.:

    from UM.Logger import Logger
    
    Logger.log("d", "With Dual Script RepRap Duet3D V%s" % self.version)

     

    Kann man seinen eigenen log Datei Text erstellen.

    Verwende ich auch um Sachen zu Debuggen

     

    Gruß

    • Like 1
    Link to post
    Share on other sites

    Posted · Python Script debuggen

    Ich habe die Community Edition von PyCharm

     

    Ich wollte glaube ich python Editor schreiben, weiß nicht wie ich auf Explorer gekommen bin

     

    Könnte auch sein das man sich da eine Python Version installieren muss um den Python Interpreter fest legen zu können nach welchen überprüft werden soll.

    Habe bei mir Standard mäßig, wegen andere Projekte beide Versionen Installiert, daher kann ich es nicht genau sagen

    • Like 1
    Link to post
    Share on other sites

    Posted · Python Script debuggen

    Ich kann dir PyCharm auch wärmstens empfehlen, es gibt meiner Meinung nach nicht viel besseres. Habe auch VSCode versucht von dem alle so begeistert sind, aber der Linter ist langsam und arbeitet erst beim Speichern. in PyCharm bekommst du schon Feedback während du schreibst.

    • Like 1
    Link to post
    Share on other sites

    Posted · Python Script debuggen

    eine frage hätte ich noch. 

     

    wie kann ich variablen ausgeben um den wert zu kontrollieren? 

    bspw: anhand des vorhanden replace-scripts:

    def execute(self, data):
            search_string = self.getSettingValueByKey("search")
            if not self.getSettingValueByKey("is_regex"):
                search_string = re.escape(search_string) #Need to search for the actual string, not as a regex.
            search_regex = re.compile(search_string)
    
            replace_string = self.getSettingValueByKey("replace")
    
            for layer_number, layer in enumerate(data):
                data[layer_number] = re.sub(search_regex, replace_string, layer) #Replace all.
    
            return data

    wie kann ich bspw das data ausgeben?

    ich bin es gewohnt, dass ich bspw mittels: echo, log, print, alert, msgbox usw.... in anderen programmiersprachen, werte ausgeben lassen kann, um sie zu überprüfen.
     

     

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    okay. da werde ich weiter testen.

        def execute(self, data):
            search_string = self.getSettingValueByKey("search")
            if not self.getSettingValueByKey("is_regex"):
                search_string = re.escape(search_string) #Need to search for the actual string, not as a regex.
            search_regex = re.compile(search_string)
    
            replace_string = self.getSettingValueByKey("replace")
    
            for layer_number, layer in enumerate(data):
                data[layer_number] = re.sub(search_regex, replace_string, layer) #Replace all.
    
            return data
        Logger.log("d", list(enumerate(data))

    funktioniert ja leider nicht.....

     

    kann man eigentlich im script eine weitergabe des gcodes an eine url realisieren?

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Du kannst glaube ich im Logger nur einen String ausgeben und keine Liste. Mit list() erzeugst du aber eine Liste.

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Also ich habe auch schon listen ausgegeben, sollte gehen

    Ich glaub was nicht geht ist list(enumerate das geht nur mit for oder map

    schreib mal nur

    Logger.log("d", (data))

     

    Und zweitens fehlte da noch eine klammer zu

    falls es dein Editor nicht anzeigt würde ich ihn wechseln

    image.thumb.png.f266602c5028fa769312a9dbad2c53d8.png

     

    Und da das nur ein Ausschnitt aus dein Programm ist. glaube ich aber das es vor den return rein muss, und einmal eingerückt werden muss (ich habe das Skript rauskopiert vielleicht sind da die Zeilen nicht mehr ganz korrekt)

     

    Darf ich fragen was du planst

    Bist nur am Testen/Verstehen

    Ich habe auch schon data ausgegeben um zu verstehen was darin enthalten ist 😁

     

    Gruß

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Achja, die Klammer.

    Das ist mir jetzt etwas peinlich 🙃.   

     

    Aber das ist nur ein kopier Fehler. Ich werde es ohne enumerate austesten. Generell habe ich vor den gcode sehr gezielt, jedoch massiv abzuändern

     

    Die Data Ausgabe war nur ein Test, da ich wissen wollte, ob mir eine Liste (Array) ausgegeben wird oder ob ich eine Fehlermeldung erhalte, dass es sich um ein Objekt handelt. 

     

    Ebenfalls wollte ich sehen, wie Inhalt angeführt ist. Ob es sich um ein Array(Liste) handelt, in der Eintrag  eine Zeile beinhaltet. 

    Dadurch wusste ich, ob ich es mit einer einfachen Schleife durchlaufen bzw. gezielt mit der Indexierung abfragen bzw ändern kann.

     

     

     

  • Link to post
    Share on other sites

    Posted (edited) · Python Script debuggen

    Jaja So eine Klammer oder Komma oder die Falsche Pos sind die größten Feinde

     

    Ich habe bei mir dann immer eine log Ausgabe erstellt, an einer ziemlich frühen pos. in Code, wo nach ich dann in der Cura.log jedes mal Suchen lassen konnte, z.B.:

    Logger.log("d", "jumbo")

     

    Somit kannst du in der log Datei nach "jumbo" Suchen, und die folge Zeilen sind dann deine anderen log ausgaben.

    Sonst sucht man sich zu tote jedes mal die richtige Pos in der Cura.log zu finden

     

    Wenn ich das noch richtig Weiß wird bei data eine Liste mit Blockweiße Strings des gcode ausgegeben

    (gcode Kopf, Start Code, und dann Layer weise war das glaube ich)

     

    Schau dir mal das Script "InsertAtLayerChange" an, so ähnlich ist auch immer mein Aufbau

    bei den ersten for ist die Liste wo blockweise Strings enthalten sind

    In Layer ist somit ein String der mit split Zeilen weiße in eine Liste gesplitet wird

    Und die Liste lines wird beim zweiten for abgerufen

    Also line ist dann Zeile für Zeile

     

    Gruß

    Edited by zerspaner_gerd
    • Thanks 1
    Link to post
    Share on other sites

    Posted · Python Script debuggen
    4 minutes ago, zerspaner_gerd said:

    Jaja So eine Klammer oder Komma oder die Falsche Pos sind die größten Feinde

     

    Ich habe bei mir dann immer eine log Ausgabe erstellt, an einer ziemlich frühen pos. in Code, wo nach ich in dann in der Cura Log jedes mal Suchen lassen kann, z.B.:

    Logger.log("d", "jumbo")

     

     

    hahahaha🤣

    genau so hab ich es auch gemacht, nachdem ich beim ersten mal alles durchgescrollt habe und dann erst recht nicht wusste, ob die ausgabe von mir ist🤣, den einfache strings haben eh gleich funktioniert

    • Like 1
    Link to post
    Share on other sites

    Posted · Python Script debuggen

    👍😅

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Puh,,, so ein http request via Post ist gar nicht so einfach... 

    Hab zwar das hier, aber das ist noch immer sehr kompliziert 

    Quote

    def post(self, url: str,

                 headers_dict: Optional[Dict[str, str]] = None,

                 data: Optional[Union[bytes, bytearray]] = None,

                 callback: Optional[Callable[["QNetworkReply"], None]] = None,

                 error_callback: Optional[Callable[["QNetworkReply", "QNetworkReply.NetworkError"], None]] = None,

                 download_progress_callback: Optional[Callable[[int, int], None]] = None,

                 upload_progress_callback: Optional[Callable[[int, int], None]] = None,

                 timeout: Optional[float] = None,

                 scope: Optional[HttpRequestScope] = None) -> "HttpRequestData":

            return self._createRequest("post", url, headers_dict = headers_dict, data = data,

                                       callback = callback, error_callback = error_callback,

                                       download_progress_callback = download_progress_callback,

                                       upload_progress_callback = upload_progress_callback,

                                       timeout = timeout,

                                       scope = scope)

     

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Habe deinen Code mal in meinen Editor reinkopiert und da wird alles Rot dargestellt, mir sagt das gar nichts bzw. da gibt es Zeichen z.B. "->" die habe ich in Python noch nie gesehen

     

    Also wenn der geteilte Code alles war was du gefunden hast wird das nicht viel bringen, also mir auf jedenfalls nicht, oder du hast nur ein Teil kopiert man kann so aber nichts nachvollziehen.

    Vielleicht kannst du mal ein Linkt etc. Teilen bzw. komplettes Beispiel Plugin nennen bzw. hast du das aus einen Beispiel Plugin gefunden oder irgendwo im Internet?

     

    Ich habe jetzt mal nach " http request via Post" gegoogelt (hatte ich noch nie gehört), den gefunden Code ist für mich schon mal leserlich und auf den ersten blick komplett, aber keiner für Cura Plugin.

    Ich würde es wahrscheinlich (wenn ich sowas brächte) in normalen Python über der Konsole testen, geht schneller kann man innerhalb von sec. ablaufen lassen, somit weis man das es funktioniert und dann würde ich es versuchen in Cura Plugin zu integrieren.

    Aber ich weiß auch nicht ob man da alle benötigten Python Bibliotheken importieren kann, re und math funktionieren aber mehr habe ich nie gebraucht

     

    Achso wollte fragen was du eigentlich "bauen" willst, habe aber nochmal nach oben gescrollt und das gefunden

     

    On 11/8/2021 at 1:34 PM, jumbo125 said:

    kann man eigentlich im script eine weitergabe des gcodes an eine url realisieren?

     

    Du willst deinen gcode an einer URL senden?

    Ich glaub da bist du bei den Nachbearbeitungs Plugin komplett falsch bzw. ich glaub nicht das das dort geht.

    Es wäre bestimmt möglich wenn man in Cura Nachbearbeitung/PostProcessingPlugin alle Bibliotheken importieren kann, aber ich frage mich was Cura noch nach den Plugin durchführt bzw. wenn mehr Plugin aktiviert sind muss ja die Reihenfolge auch stimmen sonst wird der schon vorher "versendet" und das zweite Plugin wird erst danach ausgeführt.

     

    Es gibt ja solche Plugins in Cura, siehe Marketplace, aber das sind komplett andere und keine PostProcessingPlugin.

    Diese Plugins muss man auch installieren, so eins habe ich noch nie erstellt.

    Habe mir mal eine Datei auf GitHub angeschaut und da ist auch dieses Zeichen "->" öfter vorhanden

    Aber das sind sehr aufwendige Plugins da auch eine GUI direkt in Cura erstellt wird.

    Da ich ein Duet besitze habe ich mir das Plugin angeschaut:

    https://marketplace.ultimaker.com/app/cura/plugins/thomas_kriechbaumer/DuetRRFPlugin

    Und hier die GitHub Seite:

    https://github.com/Kriechi/Cura-DuetRRFPlugin/blob/master/README.md

    Da sieht man auch das da komplett eine eigene GUI + unten die Taste geändert wird, ich glaub das macht man nicht so schnell nebenbei.

     

    Gruß

     

    • Like 1
    Link to post
    Share on other sites

    Posted · Python Script debuggen

    danke dir!

    ich hab es schon zur hälfte, aber ganz will es noch nicht.....

    zurzeit kämpfe ich damit, dass der request ausgeführt wird, wenn er im getSettingDataString steht.

    leider wird nichts im def execute ausgeführt

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Naja

    Wenn das bezogen ist auf dein anderes Thread wost du dein Script geteilt hast, sind da schon noch einige Baustellen offen.

    Wenn da mein Editor schon Fehler meldet wird es sicher nicht laufen

  • Link to post
    Share on other sites

    Posted · Python Script debuggen

    Vorweg, vielen vielen Dank für eure Unterstützung.

    Da sich dieses Thema um das debuggen handelt und ihr mir eure Vorgehensweise bereits erläutert habt, kann man dieses thema schließen, wenn dies in Ordnung wäre, damit es überichtlich und strukturiert bleibt. ich möchte nicht gleich negativ auffallen.

  • Link to post
    Share on other sites

    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now
     Share

    • Our picks

      • New here? Get ahead with a free onboarding course
        Hi,
         
        Often getting started is the most difficult part of any process. A good start sets you up for success and saves you time and energy that could be spent elsewhere. That is why we have a onboarding course ready for
        Ultimaker S5 Pro Bundle, Ultimaker S5, Ultimaker S3 Ultimaker 2+ Connect.   
        They're ready for you on the Ultimaker Academy platform. All you need to do to gain access is to register your product to gain free access. 
        Ready? Register your product here in just 60 seconds.
          • Like
        • 11 replies
    ×
    ×
    • Create New...