Python-Datei in andere Python-Datei implementieren

  • Hi, kurze Frage:


    ich habe rpi_rf über sudo pip3 install rpi-rf installiert.


    Über das Terminal führe ich folgende Datei aus um per Funkmodul einen Code zu senden.


    Dort gebe ich bspw. python3 /home/pi/send.py -p 506 -t 5 3677282 ein und die Lampe geht an.


    Wie kann ich diese Datei nun am besten in ein andere Python-Skript implementieren?


    import send oder muss ich die send-Datei noch verändern?


    Gruß, Tom

  • Tillmario

    Changed the title of the thread from “python datei in andere python Datei implementieren” to “Python-Datei in andere Python-Datei implementieren”.
  • Hallo,


    den Code kannst du quasi gar nicht wo anders integrieren, weil das Programm eigentlich nichts hat, was man importieren kann. Das Ding ist halt so geschrieben, dass es 1x durchläuft und fertig ist.


    Wenn du das ganze auf einbindbar "umbaust", dann würde ich:

    • Den argparse-Teil entfernen, weil ein importiertes Modul keine direkten Zugriff auf die Aufruf-Parameter hat.
    • Den Logger-Teil ggf. so ändern, dass eine Instanz des Loggers vom aufrufenden Programm übergeben wird. Das ein importiertes Modul selber / eigenständig loggt ist IMHO unüblich.


    Gruß, noisefloor

  • folgender Thread ist noch keine Woche alt. Das Forum hat eine Suchfunktion! ;)

    Btw: Python Programm aus einem Python Programm aufrufen

    Den habe ich vorm Erstellen des Threads gelesen. Ich soll Klassen/Funktionen draus machen. Daher meine Frage, wie das in meinem Fall am besten geht.

    Ich hätte sonst ein def send_signal(): drüber geschrieben, muss ja aber irgendwie die Parameter -p 506 -t 5 3677282 einbinden.


    Wenn du das ganze auf einbindbar "umbaust", dann würde ich:

    • Den argparse-Teil entfernen, weil ein importiertes Modul keine direkten Zugriff auf die Aufruf-Parameter hat.
    • Den Logger-Teil ggf. so ändern, dass eine Instanz des Loggers vom aufrufenden Programm übergeben wird. Das ein importiertes Modul selber / eigenständig loggt ist IMHO unüblich.


    Danke für Deine Antwort aber dann kann ich es vergessen. Gefühlt alles in dem Skript ist argesparse, ich kann da nichts entfernen um es mit was auch immer zu ersetzen. Danke trotzdem.


    Gibt es denn kein Modul (oder wie es heißt), das ich über apt-get install installiere und in Python importiere. Dem ich dann sage an welchem GPIO-Pin Data hängt und wo ich send(506,5,3677282) etc. ausführe?

    Ich habe schon bei github geschaut, werde aber nicht wirklich fündig.


    Gruß, Tom

  • Hallo,


    Quote

    Gefühlt alles in dem Skript ist argesparse, ich kann da nichts entfernen um es mit was auch immer zu ersetzen.

    argparse impliziert nun mal direkt Nutzung auf der Kommandozeile. Du kannst argparse aber problemlos kicken, deinen restlichen Code in eine Funktion stecken und der alle benötigten Werte als Parameter übergeben. Wie man das halt so standardmäßig macht - was du geschrieben hast ist halt eher "Spaghetti-Code", was im gegeben Fall aber wertneutral gemeint ist.

    Wenn du wiederverwendbaren Code schreiben willst, dann _musst_ du alles in Funktionen und Klassen packen. Geht nicht anders.


    Quote

    Gibt es denn kein Modul (oder wie es heißt), das ich über apt-get install installiere und in Python importiere.

    Der Satz macht wenig Sinn und im Kontext deiner Frage noch weniger.


    Beschreib' doch mal, was du letztendlich vor hast. Was ist dieses "andere Programm"?


    Gruß, noisefloor

  • Okay, ich hatte einen Denkfehler. Das Modul (heißt es überhaupt so?) was ich installieren und importieren wollte habe ich ja schon. rpi_rf


    Ich habe den Zusammenhang nicht ganz gechecked. Dieses ganze argseparse hat mich verwirrt, weil ich es noch nie benutzt habe und ich nicht einfach irgendetwas schreiben/benutzen möchte, was ich nicht verstehe. Aber im Endeffekt läuft es ja nur hierdrauf hinaus.

    Python
    from rpi_rf import RFDevice
    
    rfdevice = RFDevice(17)
    rfdevice.enable_tx()
    
    rfdevice.tx_code(3367042,5,505)
    rfdevice.cleanup()

    Und es ist ja schon genau das, was ich wollte ^^

    Gibt es denn kein Modul (oder wie es heißt), das ich über apt-get install installiere und in Python importiere. Dem ich dann sage an welchem GPIO-Pin Data hängt und wo ich send(506,5,3677282) etc. ausführe?

    Wie Du es ja schon gesagt hast, was ich zu dem Zeitpunkt nicht verstanden habe, weil ich nicht wusste warum der Code funktioniert wie er es tut. Anyway, danke für dene Mühe. :)