Wie sage ich es in Python ? (Einsteigerfragen)

  • 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:

  • 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 ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

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

    Ergibt:

    TypeError: unorderable types: _io.TextIOWrapper() < int()

    Die datei.sh schaltet nur einen GPIO aus, an der ein Verbraucher hängt.

  • Python
    with open("C:\\users\\dbv\\Downloads\\volt.txt") as volt:
    v = float(volt.readline())
    if v < 10:
    print("Jepp")
    Jepp

    Du musst schon mit "v" vergleichen nicht mit "volt" ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

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

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • 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.

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • 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!

    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • So geht's in der Shell:


    Kein Support per PN! Von Hilfestellung sollen alle profitieren!

  • 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.

    Edited once, last by L.E.D. ().