Laufendem Skript Parameter übergeben

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

    ich habe mir per Python verschiedene Anzeigeprogramme für meine LED-Leiste programmiert.
    Jetzt habe ich diese in ein Skript übernommen, welches über Threads das jeweilig aktuelle Programm (z.b Visualizer, Klingel, Fade, Blink) lädt.
    Dieses Skript läuft dank umgebender while true: Schleife immer.

    Wie kann ich diesem Skript Parameter übergeben? Ich will bspw. per Webinterface die einzelnen Programme aktiv schalten können. Mein erster Gedanke war mit sys.argv[] zu arbeiten, aber dabei würde ja jeweils eine neue Instanz des Skripts erzeugt, oder?

    Vielen Dank für Eure Hilfe! :)

    • Offizieller Beitrag

    Ohne das Script zu gesehen zu haben würde ich pauschal nen SocketServer empfehlen oder du speicherst die Parameter in der Datei und lässt sie vom Script Auslesen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Ich habe zwar keine Ahnung von Python, aber das könnte man prinzipiell mit einer namend Pipe lösen (mkfifo). Auf der Leseseite machst du ein read (mit timeout) und auf der Schreibseite kannst du dann asynchron deine Befehle (Parameter) einspeisen...

  • Vielleicht wäre eine Datenbank noch interessant, da ich bei mir noch die Einstellungen vorhalten will (auch nach dem Neustart) und auch protokoliere, habe ich das von der Webseite her über einfache flags in der Datenbank gelöst und das Python script liest regelmäßig die Datenbank und übernimmt der Werte. Stellenweise schreibe ich auch vom script in die Datenbank, so bekommt meine Website auch Rückmeldungen.

  • xjazzor: Eine Möglichkeit wäre es eine Config Datei anzulegen, die du als Modul in dein Skript lädst. Die kann z.B. JSON sein, aber auch eine einfache Bibliothek/Liste reicht aus.

    Dein Script:

    Config Datei:

    Code
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    
    
    test = [a, b, c]

    Die Config Datei kannst du dann egal wie bearbeiten, sobald die read_config Funktion ausgeführt wird, werden die neuen Werte übernommen.

    Zwischen deinen Threads müsstest du dann über Objekte kommunizieren.

  • Wow, ich hatte diesen Beitrag schon fast wieder vergessen. Danke für die ganzen Ideen und Anregungen!

    Ich habe mich schlussendlich für die Variante mit dem Socket-Server entschieden, weil ich eh auch die Möglichkeit brauche, Parameter von einem Windows PC an den Python auf dem PI zu übergeben und da bietet sich der Socket-Server ja auch an. :)

    Aber ein dickes Danke nochmal an Alle hier! Es macht Spaß, hier auf Gleichgesinnte zu treffen! :thumbs1:


  • xjazzor: Falls dein Ansatz funktioniert, könntest du diesen dann mit uns teilen? Das wäre super, danke.

    Werde ich machen. Bin momentan noch dabei, die LED-Steuerung komplett zu überarbeiten. Dies wird ein Teil davon. Wenn ich damit fertig bin, werde ich das hier komplett online stellen.

    Im folgenden zeige ich euch aber schonmal einen Auszug, wie ich die Kommunikation gelöst habe:
    Zuerst die 'Steuerdatei', die momentan nur Kommandozeilenparameter per UDP an den Socket-Server schickt:
    (Mehr oder minder aus der Python Doku geklaut) ;)
    client.py:

    Und die Gegenseite, allerdings hier gerade nur die ursprüngliche Funktion, im endgültigen Projekt sind gerade noch zuviele Querverweise drin. Werde ich, wie gesagt komplett dann hier reinwerfen, wenn es fertig ist. :)
    server.py:

  • hallo zusammen,
    === edit ===
    --ja, hast recht, mobby--
    xjazzor:
    ===edit ende===

    Code
    #!/usr/bin/env python3
    Code
    print 'Neue Verbindung:'


    => Python2

    Code
    print('Neue Verbindung:')


    => Python3

    nur nebenbei ...

    Viel Glück !

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

    Einmal editiert, zuletzt von Perlchamp (31. Juli 2014 um 14:26)

  • Forumbeitrag ist zwar schon mehr als 1 Jahr her, aber vieleicht habe ich deswegen den folgenden Fehler in:

    line 9, in <module>
    e_udp_sock.bind( (Quelle,Port) ) #Im IP-Adresse und Port werden
    OSError: [Errno 99] Cannot assign requested address

    beim starten vom Empfängerscript.

    Mit dieser Fehlermeldung stehe ich entweder auf dem Schlauch oder mein Hintergrundwissen reicht nicht aus.
    Für eure Hilfe bin ich euch sehr dankbar. Ich möchte von meinem Raspi (mit PC per SSH Verbunden) eine Nachricht an den PC schicken.
    Später will ich dann eine Variable (Messwert), die ich mit den Raspi erzeuge auf meinem PC (in einem pythonscript) weiterverarbeiten.

    Edit: gelöst: Meine IP Adresse im Script war nicht die meines Rechners! Empfängerscript startet nun!

    Einmal editiert, zuletzt von Bastelfreak (24. Oktober 2015 um 23:24)

Jetzt mitmachen!

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