Python-Datei in andere Python-Datei implementieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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

  • Python-Datei in andere Python-Datei implementieren? Schau mal ob du hier fündig wirst!

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

    Zitat

    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.

    Zitat

    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. :)

Jetzt mitmachen!

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