Wie mit Python : Script ruf anderes Script mit Parameter auf

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
piro299
User
Beiträge: 3
Registriert: Mittwoch 20. November 2013, 14:57

Moin zusammen,

da ich auf meinem Raspberry Pi Python haben, möchte ich gerne mehr machen und Python etwas besser lernen.
Auf meinem RPi habe ich einen kleinen Wetterdaten-Logger, der mit Python, pyserial, Funksensoren und einem Funkmodul Temperatur und Luftfeuchtigkeit sammelt und in einer Webseite darstellt.

Wie ist der beste Weg in Python, um aus einem laufenden Python Script ein anderes Python Script mit Übergabe von Werten zu starten?

Ich habe einiges im Web gefunden.
- import des anderen Scripts (Modul)
- os.system verwenden (soll aber langsam sein)

Warum das ganze?
Wie oben beschrieben verwende ich ein Python Script, welches in einer Endlosschleife den seriellen Port (USB Funkstick - CUL868) überwacht.
Wenn Daten empfangen werden, werden diese aufbereitet und in eine SQLite DB geschrieben.
Nun habe ich das Gefühl, dass die Verarbeitung einzelner Daten etwas dauern kann und so neue ankommende Daten nicht berücksichtigt werden. Erst wenn die Verarbeitung fertig ist, kann wieder empfangen werden.

Jetzt war mein Gedanke, dass ich das so mache wie mit einer CMD Datei, die eine andere CMD Datei aufruft und nicht auf das Beenden dieser wartet. Somit läuft das Hauptprogramm und überwacht den Port. Wenn was ankommt, übergibt es einfach die Daten an das andere Script und überwacht weiter. Unter Windows wird jeder Aufruf der 2. CMD Datei in einem neuen Prozess gestartet. Somit behindern sich die Scripte nicht und alles ist bestens.

Wie macht man das nun geschickt mit Python? Thread-Programmierung wäre auch noch ein Ansatz. Da ich aber sehr neu bin im Umgang mit Python ist es für mich etwas zu kompliziert derzeit.

Vielen Dank im Voraus.
Sven
BlackJack

@piro299: Als erstes solltest Du mal prüfen ob Du da ein Problem lösen willst was es gar nicht gibt. Eine serielle Schnittstelle ist normalerweise gepuffert. Wenn die Zeit generell nicht ausreicht, dann wird das durch einen *weiteren* Prozess der den einzigen Prozessor im System beansprucht sehr wahrscheinlich nicht besser.

Das nächste wäre den tatsächlichen Flaschenhals zu identifizieren, wenn es denn wirklich ein Problem gibt. Falls der Verarbeitungscode nicht total ungünstig geschrieben ist, oder wirklich sehr viel macht, würde ich nämlich erst einmal auf die SD-Karte als Bremse tippen.
piro299
User
Beiträge: 3
Registriert: Mittwoch 20. November 2013, 14:57

Also die SD-Karte ist es nicht. Gehen wir mal von aus das alles bestens läuft.

Ich würde gerne die beiden logischen Abläufe trennen.
Der eine Ablauf ist die Hauptroutine, die alle Daten empfängt und die andere Verarbeitet die Daten.

Wenn ich da 2 Module draus mache, kann ich die Verarbeitung individuell machen. Einmal schreibe ich die Daten in die SQLite DB und dann könnte ich das 2. Modul umbauen und die Daten in eine MySQL DB schreiben.

Also, was ist besser? Alles in einem Modul (=Python Script) mit Definition von Funktionen oder ein weiteres Modul, was aufgerufen wird.

Danke im Voraus.
Sven
BlackJack

@piro299: Die logischen Abläufe zu trennen erfordert weder Threads noch externe Prozesse. Schau Dir Iteratoren, Generatorfunktionen und -ausdrücke an.
piro299
User
Beiträge: 3
Registriert: Mittwoch 20. November 2013, 14:57

Alles klar. Danke.

Ich habe mir gerade ein Tutorial gezogen und gehe es durch. Eventuell hole ich mir noch ein Buch.

Schönen Abend noch.
Antworten