Salut,
ich suche eine Möglichkeit, ein anderes Programm mittels Python zu beenden. Ich dachte da alternativ auch an "killall", aber keine Ahnung, ob man solche Befehle auch in Python einbetten kann.
Könnt ihr mir eventuell mal kurz helfen?
![]() Anmeldungsdatum: Beiträge: 278 Wohnort: Berlin |
Salut, ich suche eine Möglichkeit, ein anderes Programm mittels Python zu beenden. Ich dachte da alternativ auch an "killall", aber keine Ahnung, ob man solche Befehle auch in Python einbetten kann. Könnt ihr mir eventuell mal kurz helfen? |
![]() Anmeldungsdatum: Beiträge: 1253 |
os.kill(pid) http://docs.python.org/lib/os-process.html €dit: |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 278 Wohnort: Berlin |
Danke. :] Edit: Bzw. ne, so ganz klappt das noch nicht. Ich möchte nämlich mit diesem Script ein anderes Python-Script beenden, aber das Script ist ja nur als "python /path/blubb.py" eingetragen. blubb.py als zu beendender Prozess zu wählen bringt leider nichts. Und Python zu beenden geht auch nicht. Was nun? |
![]() Anmeldungsdatum: Beiträge: 2133 Wohnort: Gelsenkirchen |
Hast du auch das von audax gepostete Script ausprobiert? Ich bin grad an nem Windows-Rechner (ohne Python) aber nach grobem Überfliegen denke ich, dass es genau das tut was du willst. ☺ |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 278 Wohnort: Berlin |
Ja, ich habe es versucht, aber was soll ich den als Name angeben? |
![]() Anmeldungsdatum: Beiträge: 1253 |
dax@grimbold ~ :( % cat sleep.py #!/usr/bin/python import time time.sleep(100) dax@grimbold ~ :) % ./sleep.py [1] 13966 terminated ./sleep.py Wenn du es so startest, ist der Prozessname "sleep.py". Ansonsten hol dir mal in der Shell die PID und schau unter /proc/$PID/status mal selbst in die Datei. http://paste.pocoo.org/show/69682 |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 278 Wohnort: Berlin |
Habe das Script mal gestartet und in dem Ordner nachgeschaut. Dort ist als Name "python" eingetragen. |
![]() Anmeldungsdatum: Beiträge: 1253 |
Und deshalb solltest du es auch mit Namen sind eben nicht eindeutig, deswegen heißt es auch "killall". Lass dir halt die PID deines scripts in eine Datei schreiben und lese die dann aus. |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 278 Wohnort: Berlin |
Bei mir wird die Datei dennoch als "python ./script.py" angezeigt.
Hm, wie mache ich das? |
Anmeldungsdatum: Beiträge: 5792 |
@OP |
![]() Anmeldungsdatum: Beiträge: 1253 |
http://paste.pocoo.org/show/70009 Jetzt sucht er auch nach der commandline... btw: import os pid = os.getpid() open('script.pid', 'w').write(str(pid)) anderes script: import os,signal os.kill(int(open('script.pid')), signal.SIGTERM) fertig. |
![]() Anmeldungsdatum: Beiträge: 77 |
Versuchst du etwa gerade pkill nach zu programmieren? 😉 Ein Python-Script kann man zum Beispiel so beenden: pkill -f script.py
Grüße, |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 278 Wohnort: Berlin |
audax hat geschrieben:
So hats bei mir zwar nicht geklappt, aber ich habs so gelöst: #!/usr/bin/env python from __future__ import with_statement import os,signal with open('script.pid') as config: for line in config: os.kill(int(line), signal.SIGTERM) Danke für die Hilfe! |
![]() Anmeldungsdatum: Beiträge: 1253 |
Hab auch das .read() vergessen 😉 |