Seite 1 von 1
Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Donnerstag 5. Juli 2018, 19:33
von egon11
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?
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Donnerstag 5. Juli 2018, 20:36
von nezzcarth
So was in der Richtung kann man zwar machen, klingt aber wie du es beschreibt eher seltsam. Beschreib' mal, was du eigentlich vorhast; die Chancen stehen nicht so schlecht, dass es eine bessere Lösung gibt.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Donnerstag 5. Juli 2018, 20:45
von egon11
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.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Donnerstag 5. Juli 2018, 20:49
von __deets__
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?
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Donnerstag 5. Juli 2018, 20:54
von egon11
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.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Donnerstag 5. Juli 2018, 21:02
von __deets__
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.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Freitag 6. Juli 2018, 03:31
von egon11
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?
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Freitag 6. Juli 2018, 06:50
von Sirius3
@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.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Freitag 6. Juli 2018, 08:44
von __deets__
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
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Samstag 7. Juli 2018, 06:13
von egon11
Ich hab mal nach Python filelock geschaut, aber so richtig keine gute Dokumentation gefunden, wie man es einbaut. auch von __deets__ habe ich mir angeschaut. Ich habe ein linux Rechner.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Samstag 7. Juli 2018, 09:11
von DeaD_EyE
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
...
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Sonntag 8. Juli 2018, 10:27
von egon11
ok. Meine frage wäre noch, wie ich es in ein Script einbaue. Mir ist leider nicht ganz klar (hab auch schon filelock pypi durchgelesen) was ich damit machen soll.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Sonntag 8. Juli 2018, 15:06
von __deets__
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
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Sonntag 8. Juli 2018, 16:23
von __deets__
Was in den Beispielen leider fehlt: du kannst dem Kontextmanager natürlich das dateiobjekt auf die übliche Art entlocken:
with LockFile(....) as f:
....
Das eignet sich dann um PID zu schreiben oder zu lesen.
Re: Prüfen, ob ein anderes Python Script schon läuft
Verfasst: Sonntag 8. Juli 2018, 20:23
von egon11
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...