Subprocess, zwischen Python-Scripten wechseln

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
Nobima
User
Beiträge: 27
Registriert: Montag 4. Januar 2016, 18:26

Guten Tag,

ich verwende mehrere Python-Scripte, zwischen denen ich hin und her schalten möchte.

Dazu öffne ich im Hauptscript ein anderes Script mit

Code: Alles auswählen

proc1 = subprocess.Popen (['/usr/bin/python', 'Script1.py'])
Bevor ich das nächste Script öffne, beende ich Script1 mit

Code: Alles auswählen

subprocess.Popen.kill(proc1)
Nun möchte ich aber nicht jedesmal den zuletzt geöffneten Prozess schließen, sondern zwischen den geöffneten Prozessen umschalten ohne diese zu schliessen. Gibt es dafür eine Lösung ?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Nobima: was meinst Du mit "umschalten" genau?

Statt extra Python-Prozesse zu starten, könntest Du die "Skripte" auch als Module importieren und dann vom Hauptprogramm aus auf deren Funktionen zugreifen. Das könnte das "Umschalten" vielleicht vereinfachen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Prozesse sind unabhaengig, soll heissen ohne IPC zb eben durch Signale (wie bei `kill`) geht da nichts.

Ich schliesse mich aber Sirius3 an: Python durch `subprocess` zu starten riecht komisch. Was willst du denn eigentlich machen?

Daneben: `kill` ist eine Methode auf `subprocess.Popen` Objekten, also auch auf `proc1`: -> `proc1.kill()`
BlackJack

Bemerkung am Rande: Falls man sicherstellen möchte dass ein externes Python-Programm mit dem gleichen Interpreter ausgeführt wird wie das aktuell ausgeführte, kann man statt den Pfadnamen zum Pythoninterpreter hart in den Quelltext zu schreiben auch `sys.executable` verwenden. Das würde dann auch funktionieren wenn man auf einem System arbeitet wo unter '/usr/bin/' kein (aktuelles) Python liegt.

Ansonsten schliesse auch ich mich den Vorrednern an und Frage: Was soll denn da eigentlich gelöst werden wofür Dein Vorgehen die Lösung sein soll? Denn selbst wenn man ein Programm hat bei dem mehrere Prozesse Teilaufgaben erledigen sollen, gäbe es auch noch so Dinge wie `multiprocessing` oder `concurrent.futures`.
Nobima
User
Beiträge: 27
Registriert: Montag 4. Januar 2016, 18:26

Danke für die Antworten,

die verschiedenen Python Scripte sind Programme mit diversen grahpischen Oberflächen (Systemschaltbilder) die jeweils in unterschiedlichen Zeitabständen mit Werten aus einer Datenbank aktualisiert werden. Die Zeitabstände sind jeweils in Tkinter festgelegt und werden mit z.B.
root.after(2000, task)
realisiert.

Ich kann mir noch nicht vorstellen, wie ich das in einem einem Script mit den diversen Modulen umsetzen soll, bin aber für Anregungen dankbar. Das Umschalten zwischen den Systemschaltbildern erfolgt mit einer IR-Fernbedienung.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

für's Verrständnis: die verschiedenen Skripten generieren alle eine GUI mit Tkinter. Die einzige Aufgaber der GUI ist es, eine Grafik darzustellen?

Gruß, noisefloor
Nobima
User
Beiträge: 27
Registriert: Montag 4. Januar 2016, 18:26

NIcht ganz, denn das jeweilige GUI holt auch in bestimmten Zeitabständen Werte aus einer Datenbank und stellt sie grafisch als Zahlen bzw. Symbole dar.
Es würde völlig genügen, wenn es gelänge, eines der geöffneten GUI-Script jeweils in den Vordergrund zu bekommen.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Es würde völlig genügen, wenn es gelänge, eines der geöffneten GUI-Script jeweils in den Vordergrund zu bekommen.
IMHO würde es völlig genügen, wenn man die Darstellung _einer_ GUI einfach aktualisiert :-)

Gruß, noisefloor
Nobima
User
Beiträge: 27
Registriert: Montag 4. Januar 2016, 18:26

Klingt vielversprechend, es muss aber möglich sein, die Aufforderung zur Aktualisierung vom Hauptscript an das betreffende geöffnete Script zu übergeben.
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Klingt vielversprechend, es muss aber möglich sein, die Aufforderung zur Aktualisierung vom Hauptscript an das betreffende geöffnete Script zu übergeben.
Nee, so meinte ich das nicht. Das solltest nur _eine_ GUI habe und die enthält alles. Tkinter kennt ja z.B. auch Tabs.

Gruß, noisefloor
Nobima
User
Beiträge: 27
Registriert: Montag 4. Januar 2016, 18:26

Ich habe es mit "xdotool" gelöst.
Damit kann ich aus Python heraus festlegen, welches Fenster (Script) im Vordergrund angezeigt wird. Die anderen Scripte laufen nicht sichtbar dahinter weiter.
Antworten