Wie sage ich es in Python ? (Einsteigerfragen)

  • Hallo, ich habs jetzt primitiver gemacht, aber es taugt für meine Anforderungen. Mit einer Arbeitsdatei.

    os.system('grep -H "4711" /var/tmp/eingabe* > /var/tmp/work')

    work = open('/var/tmp/work','r')

    usw...

  • Hallo ich habe ein paar Fragen hier erst mal der aktuelle Code:

    Übrigens das ist mein erstes mal mit Python... also wenn es irgendwelche Fehler gibt bitte sagen!



    Meine Fragen:


    1. GPIO.setup (Start, GPIO.IN) soll mal ersetzt werden. Also wenn eine bestimmte Uhrzeit ist soll das passieren was "Start" aktuell ausführt. Was gibt es und wie funktioniert es?


    2. Die Vorübergehenden Merker (GPIO 24-25)... ich weiß nicht ob ich die in diesem Skript noch verwenden werden aber das könnte sein deswegen frage ich nochmal lieber nochmal wie mache, denn ich verstehe die Erklärungen die man im Internet sind nicht hoffe hier wird mir besser geholfen.


    Danke schon mal im voraus!

  • Hallo,


    kannst du bitte dein Vorhaben etwas detaillierter beschreiben? Ich verstehe ehrlich gesagt deine Fragen 1 und 2 nicht so ganz.


    Mal was allgemeines zu Python:

    Beim importieren wird 'as' zum umbenennen benutzt. Du nennst 'GPIO' in 'GPIO' um. Es gibt verschiedene Arten Module zu importieren.

    Entweder du importierst RPi:

    Code
    import RPi
    
    # Zugriff auf GPIO:
    RPi.GPIO.setup(...)

    So kannst du dann alles nutzen was 'RPi' zur Verfügung hat.

    Wenn du nur 'GPIO' nutzen möchtest, dann kannst du das so machen:

    Python
    from RPi import GPIO
    
    # Zugriff auf GPIO:
    GPIO.setup(...)

    Man kann dann noch die Module umbenennen, zum Beispiel:

    Python
     from datetime import datetime as dt
    
    print(dt.now())


    Zur Gestaltung von Python-Programme kannst du dir mal den Style-Guid anschauen.

    Hier wo bei dir Sachen wie 'GPIO.setmode(GPIO:BCM)', 'Luftventil' und weiteres steht, da sollten nur Konstanten, Funktionen und Klassen definiert werden. Das nennt man auch Modulebene. Konstanten sind in deinem Fall die GPIO-Nummern.

    Die schreibt man in Python dann KOMPLETT_GROSS. Alle anderen Namen, mit Ausnahme von Klassen, die schreibt man in CamelCase-Schreibweise, schreibt man klein_mit_unterstrich.

    Dein Programm wird aus einer Funktion mit dem Name 'main' gesteuert. Dort wird dann zu Beginn auch die GPIO definiert und im Anschluss werden daraus weitere Funktionen aufgerufen.

    Wenn du GPIO verwendest, musst du sicherstellen damit nach dem Programmende die GPIO-Belegung aufgeräumt wird. Dazu musst du 'cleanup' aufrufen. Damit dass immer ausgeführt wird, egal wie dein Programm beendet wird, verwendet man 'try/finally'

    Der Aufbau ist dann nachher in etwa so:


    Zum Schluss noch ein Hinweis, gpiozero ist eine Bibliothek zum steuern von GPIO's und ist meiner Meinung nach viel einfacher in der Anwendung. Schau es dir mal an.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • der Hintergrund meiner Frage ist

    NewTron Radio oder Peppy Player benutzen pygame-Grafik mit z.Z Modul pynanosvg und das ist abgekündigt (="deprecated") aber noch vorhanden in (Buster) Python 3.7.3. mit pip3 install pynanosvg war das Modul in Python 3 vorhanden und man konnte es importieren mit import svg. In (Bullseye) Python 3.9. führt pip3 install pynanosvg auf Fehler (hier)


    Im NewTron Radio wir die Grafik für Fenster oder Teile davon aus SVG-Dateien eingelesen und in ein pygame-image umgewandelt:

    Code
    import svg
    ...
        svgimg = svg.Parser.parse(svgbuf)
        rast = svg.Rasterizer()
        strbuf = rast.rasterize(svgimg, w_svg, h_svg)
        image = pygame.image.frombuffer(strbuf, size, "RGBA")

    Mit der Suchmaschine finde ich "cairo" und "librsvg" als Alternative zu pynanosvg.

    Code
    import cairo
    import rsvg
    ...
    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
    ctx = cairo.Context(surface)
    svg = rsvg.Handle(file="test.svg")
    svg.render_cairo(ctx)
    image = pygame.image.frombuffer(surface.get_data(), (WIDTH, HEIGHT),"ARGB")

    Meine Python-Kenntnisse sind sehr basic.

    Als Python ?Modul für "cairo" habe ich pycairo gefunden.

    Fragen:

    • Wie heißt das Python ?Modul für rsvg?
    • Kann ich rsvg.Handle auch einen String "strbuf" siehe pygame_svg übergeben?
    • Pygame soll schon SVG lesen können. Wie heißt die Function?

    Schönen Gruß, kle