Wie sage ich es in Python ? (Einsteigerfragen)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    grundsätzlich würde ich dir empfehlen, wenn du ernsthaft Python lernen willst auf ein Buch zurück zugreifen. Da mir deutschsprachige Bücher lieber sind, empfehle ich dieses hier: https://www.rheinwerk-verlag.de/python-3_4467/

    Bevorzugt die PDF Variante, da sich damit leichter nach Schlagwörtern suchen lässt.

    Auch so glaube ich, ist das Verständnis von Klassen bei dir noch etwas falsch (ich kann mich natürlich auch irren). Deshalb hier mal ein vereinfachtes Beispiel:

    So zunächst eine vereinfachte Darstellung:

    Da man Code aber nicht wiederholen soll (DRY = Dont repeat yourself), hier auch nochmals eine Funktionalisierte Version:

    Zum besseren Verständnis empfiehlt es sich, wenn du dir den Programmablauf in einem Debugger ansiehst.

    EDIT: Natürlich lassen sich die Funktionen noch variabler gestalten, aber zur Veranschaulichung wollte ich es nicht zu komplex gestalten.

  • Danke dir Hofei,

    das werd ich mir morgen mal durcharbeiten. Kann sein dass ich Klassen falsch verstehe, aber bisher macht es das was ich damit machen will ;)

    wie gesagt, war das auch nicht einfach so weit zu kommen ... viel frust dabei, lesen und lesen, nix verstehen ... probieren, nix geht, warum geht nix usw ...

  • Moin, ich möchte, das Python mir eine Datei öffnet, die Zahl ausliest und je nach Wert eine Datei ausführt, aber klappt nicht, die Zahl hat Kommastellen, z.B. 13.87 :wallbash:

    Im Moment habe ich das zusammengezimmert:

    Code
    #!/bin/env python3
    import os
    with open('/dev/shm/volt.txt') as volt:
      volt=float('')
      if volt < 13:
        os.system("sudo /pfad/script.sh")

    Bin jetzt schon seit Stunden am probieren und suchen, aber es will nicht. :@

    :helpnew:

    • Offizieller Beitrag
    Code
    with open('/dev/shm/volt.txt') as volt:
      v = float(volt.readline())

    Wenn du nur ein Wert in der Datei steht. Bei mehreren ratterst du einfach über alle Zeilen:

    Code
    with open('/dev/shm/volt.txt') as volt:
      for line in volt.readlines():
        print(line)

    und nutze bitte Subprocess anstelle von os.system. Was macht denn das andere Script? Wäre es nicht sinnig das auch direkt in python zu machen? Ein Script was ein Script aufruft empfinde ich immer als doof ;)

  • Ok, so klappts:

    Code
    #!/bin/env python3
    import os
    with open('/dev/shm/volt.txt') as volt:
      v = float(volt.readline())
      if v < 13:
        os.system("sudo /pfad/datei.sh")

    Mit subprocess gibts Fehler:

    Code
    Traceback (most recent call last):
      File "unterspannung.py", line 6, in <module>
        subprocess.run("sudo /pfad/datei.sh")
      File "/usr/lib/python3.5/subprocess.py", line 383, in run
        with Popen(*popenargs, **kwargs) as process:
      File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
        restore_signals, start_new_session)
      File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
        raise child_exception_type(errno_num, err_msg)
    FileNotFoundError: [Errno 2] No such file or directory: 'sudo /pfad/datei.sh'

    Obwohl die Datei dort ist. :conf:

  • Hm, gute Frage. :daumendreh2:

    Weil ich mit Python auf Kriegsfuss stehe und sich ständig etwas ändert.

    Die .sh läuft auch noch in 10 Jahren problemlos, ohne dass es heißt: os.system wird nicht mehr verwendet, rpi.gpio ist veraltet, die Syntax ist jetzt anders....

  • Den Inhalt einer Datei ausslesen, und dann mit einem Wert vergleichen kannst du auch alles gleich in der Shell machen. Warum dann ueberhaupt Python?

  • Womit? Mit Python? Wieso musst du? Und wenn du das willst, warum machst du das dann nicht, und schreibst es um?

    Das gpiozero empfohlen wird ist uebrigens seit mindestens 3 Jahren so, und os.system ist schon seit > 10, wenn nicht 20, nicht empfohlen. Das ist jetzt nicht Python's Schuld, wenn in der PI-Sphaere konsequent immer nach dem unpassendsten Mitteln gegriffen wird.

  • Das ist ganz eigennuetzig. Leuten, die etwas nicht moegen, dabei zu helfen, es trotzdem zu benutzen, ist frustrierend. Wenn man an jeder Ecke und bei jedem Vorschlag zu hoeren bekommt "nee, habe ich keinen Bock drauf, ich will das eigentlich nicht" - wie wuerdest du drauf reagieren? Deshalb: wenn du andere Tools lieber magst, und die funktionieren fuer deinen Zweck (und was ich jetzt gesehen habe wuerde ich sagen: klar reicht da die Shell), dann benutz die. Macht dich UND mich gluecklicher, klassisches win-win!

  • So geht's in der Shell:

  • Hallo,

    wollte was mit Pillow machen und erst Mal dieses Beispiel testen. Hab mich durchgebissen und Python3 und Pillow erfolgreich installiert. Dann die Schriftart installiert. Bekomme aber leider trotzdem eine Fehlermeldung:


    Code
    Traceback (most recent call last):
      File "test.py", line 17, in 
        font = ImageFont.truetype('Roboto-Bold.ttf', size=45)
      File "/home/pi/.local/lib/python3.7/site-packages/PIL/ImageFont.py", line 648, in truetype
        return freetype(font)
      File "/home/pi/.local/lib/python3.7/site-packages/PIL/ImageFont.py", line 645, in freetype
        return FreeTypeFont(font, size, index, encoding, layout_engine)
      File "/home/pi/.local/lib/python3.7/site-packages/PIL/ImageFont.py", line 194, in __init__
        font, size, index, encoding, layout_engine=layout_engine
    OSError: cannot open resource

    Jemand eine Idee?

    Danke & Gruß

    LED


    PS: Hab die Schriftart jetzt einfach in den Ordner kopiert, läuft.

    Einmal editiert, zuletzt von L.E.D. (23. April 2020 um 19:31)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!