Gibt es ein simpler Code, um herauszufinden ob ein Python Script schon läuft, möchte nämlich das in ein anderes Python Script einpflegen.
Wenn das Python Script xxx läuft, dann soll es irgendetwas machen. So in etwa stell ich mir das vor,.
Gibt es da ein Modul?
Prüfen, ob ein anderes Python Script schon läuft
Ich möchte es in einen Python Script einbauen. Das Script soll wenn es läuft gestoppt werden. Aber das geht nur, wenn die Bedingung heißt:
"läuft das Script, dann führe das aus..."
So in etwa, deswegen dachte ich, es gibt ein code welches prüft ob ein Script läuft, dann den Rückgabewert für "if" benutzen.
"läuft das Script, dann führe das aus..."
So in etwa, deswegen dachte ich, es gibt ein code welches prüft ob ein Script läuft, dann den Rückgabewert für "if" benutzen.
Das ist nicht wirklich eine Beschreibung deines Problems, sondern eine Umschreibung der Lösung, von der du denkst das sie passt. Aber zu 99.999% ist es das nicht, wenn es sich um zwei Python Skripte handelt.
Was machen die Skripte, und warum soll das eine nicht laufen, wenn das andere läuft?
Was machen die Skripte, und warum soll das eine nicht laufen, wenn das andere läuft?
Ich möchte mit einen (enigma2) Plugin, was ich aufrufe, einen Script starten. Und wenn ich es wieder aufrufe, möchte ich es angezeigt bekommen, ob ich es beenden möchte. Das kann ich aber nur wenn ich ein Rückgabewert erhalte, ob es läuft.
Da ich dieses enigma2 nicht kenne, und du ja nicht wirklich nicht ausholst um das zu erläutern: ein Weg dieses Problem anzugehen ist ein file lock. Damit stellt das OS sicher, dass nur ein Prozess gleichzeitig eine Datei offen hält. Und wenn du in deinem gestarteten Skript eine Datei wie zb /var/run/meinskript.pid anlegst & lockst, und darin wiederum die Prozessid des Skripts selbst speicherst, kannst du ganz einfach von außen feststellen, ob da Programm noch läuft, und es killen. Alternativ schreibst du eine Systemd-Unit, und startest/stoppst die.
Ich könnte ja beim start dieses Scriptes eine Zahl (z.b. die 1) in eine Datei schreiben lassen, und wenn in der Datei die Zahl "1" vorhanden ist, läuft das Script und kann beendet werden, und beim beenden wird der Dateiinhalt wieder gelöscht. Das wäre theoretisch machbar. Was sagen die Experten zu der Idee?
@egon11: das ist doch genau das, was __deets__ vorschlägt, nur dass man die ProzessID statt der 1 in die Datei schreibt, um auch zu prüfen, ob das Skript wirklich noch läuft, und nicht nur das Programm abgestürzt ist und deshalb niemand die Datei gelöscht hat.
Nicht nur die ID. Sondern auch noch ein file lock setzt. Dadurch verhindert man, die nicht eindeutig vergebenen Prozess-IDs zu verwechseln.
Ich habe mich gerade erinnert - das habe ich mal als fertiges Modul gebaut: https://github.com/AbletonAG/abl.util/b ... ockfile.py
Ich habe mich gerade erinnert - das habe ich mal als fertiges Modul gebaut: https://github.com/AbletonAG/abl.util/b ... ockfile.py
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Wenn du dir den Code ansiehst, wirst du erkennen, dass es auch unter Linux und Windows laufen wird.
Code: Alles auswählen
...
if platform.system() in ('Windows', 'Microsoft'):
is_windows = True
if is_windows:
import msvcrt
else:
import fcntl
...
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Das ist ein Modul. Das kannst du importieren (wenn du es runtergelaufen hast, es sollte sich sogar mit pip installieren lassen, dann als ‚pip install abl.util‘).
Und dann macht man so was der Art wie es im Test dafür zu sehen ist:
https://github.com/AbletonAG/abl.util/b ... ockfile.py
Und dann macht man so was der Art wie es im Test dafür zu sehen ist:
https://github.com/AbletonAG/abl.util/b ... ockfile.py
Jetzt habe ich es glaube verstsnden, mit dem file locker sperre ich eine datei, wenn ich mit einen anderen script auf die datei zugreifen möchte, dann geht es nicht, und wenn, dann läuft das script nicht mehr.
Jetzt muss ich mir praktisch den code zusammen bauen...
Jetzt muss ich mir praktisch den code zusammen bauen...