Module importieren - dann aber auch wieder beenden

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
sNaaz
User
Beiträge: 5
Registriert: Donnerstag 1. Dezember 2016, 10:46

Hallo,

ich suche eine Möglichkeit ein eingebundenes Modul wieder zu beenden.

Das ganze sieht aktuell so aus:

Ich importiere ein Modul welches dann eine Steuerung von Servo Motoren übernimmt.
Jetzt möchte ich mittels Tastendruck (über GPIO) den Modus wechseln, und damit auch ein anderes Modul benutzen.
Nun ist das Problem das beide Module gleichzeitig am laufen sind und sich kein Motor mehr bewegt :-/

Habe die Modulen mit If-Bedingungen geschrieben:

Code: Alles auswählen

while True:
if fall1:
tu das
if fall2:
tu dies
if GPIO
break
so in etwas sieht das ganze aus.

Aber irgentwie Funktioniert das nicht.
Wenn ich die Module einzeln starte wird die Steuerung beendet - aber wohl nicht das ganze Modul.

Für jeden Tipp wäre ich dankbar - bin da grad echt etwas festgefahren.
Gruß und danke schonmal
Zuletzt geändert von Anonymous am Donnerstag 1. Dezember 2016, 12:06, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@sNaaz: Du benutzt das Wort "Modul" nicht wie üblich (eventuell auch das Konstrukt Modul nicht wie vorgesehen). Funktionalität schreibt man in Funktionen. Module sind nur dazu da, ähnliche Funktionalität zu bündeln. Wenn Du mehrere Dinge gleichzeitig oder umschaltbar machen willst, ist eine Schleife mit Flags eine Möglichkeit, das Problem zu lösen. Deine Beschreibung reicht aber nicht aus, um jetzt einen Fehler an Deiner Implementierung zu finden. Kannst Du etwas konkreter werden?
sNaaz
User
Beiträge: 5
Registriert: Donnerstag 1. Dezember 2016, 10:46

Wenn ich meine "Module" bündel dh. alles in ein Script packe - läuft alles einwandfrei - nun wollte ich Programmteile ausgliedern, der übersichtsweise halber.

Mein Hauptprogramm sieht in etwa so aus:

Code: Alles auswählen

if Modus == 1:
import manuell

if Modus == 0:
import automatik
Den Zustand von Modus änder ich mit einem Taster.
Mein Problem denke ich ist das wenn z.B. Manuell geladen wird und ich dann auf Automatik stellen möchte das Manuell nicht abgeschaltet wird.
Wie kann man sowas machen?
Zuletzt geändert von Anonymous am Donnerstag 1. Dezember 2016, 12:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@sNaaz: Du verwendest also nicht den Begriff „Modul(e)“ falsch sondern tatsächlich Python-Module falsch. Eventuell auch schon in der Fassung Deines Programms die nur aus einem Modul besteht.

Ein Modul ist nichts was man dazu verwendet um Code ablaufen zu lassen der etwas tut, mit der einzigen Ausnahme eines Moduls das man als Programm startet. Aber selbst das sollte ”nichts” tun wenn man es nur mit ``import`` importiert. ``import``-Anweisungen gehören an den Anfang eines Moduls, damit man leicht sieht wovon ein Modul abhängig ist. Die Aussage das man ein „Modul beenden“ will, macht keinen Sinn, weil man Module die importiert werden auch nicht ”startet”.

Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst und durch folgendes Idiom am Ende des Moduls aufgerufen wird:

Code: Alles auswählen

if __name__ == '__main__':
    main()
Damit ist sichergestellt das `main()` nur ausgeführt wird wenn man das Modul als Programm ausführt, aber nicht wenn man es einfach nur per ``import`` in einer Python-Shell oder einem anderen Modul importiert.

Falls Dein Programm bisher noch nicht so aussieht, dann solltest Du das als erstes anpassen bevor Du anfängst das auf mehrere Module aufzuteilen.
Antworten