ubuntuusers.de

Programm beenden mit Python

Status: Gelöst | Ubuntu-Version: Ubuntu 7.10 (Gutsy Gibbon)
Antworten |

ThunderWar

Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

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?

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

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?

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

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. ☺

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Ja, ich habe es versucht, aber was soll ich den als Name angeben?

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

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
Ist noch ein bischen aufgeräumt.

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Habe das Script mal gestartet und in dem Ordner nachgeschaut. Dort ist als Name "python" eingetragen.

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Und deshalb solltest du es auch mit ./script.py ausführen, dann steht dort script.py .

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.

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

Und deshalb solltest du es auch mit ./script.py ausführen, dann steht dort script.py .

Bei mir wird die Datei dennoch als "python ./script.py" angezeigt.

Lass dir halt die PID deines scripts in eine Datei schreiben und lese die dann aus.

Hm, wie mache ich das?

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@OP
Du kannst auch die in /proc/$pid/cmdline gespeicherte Kommandozeile auslesen und auswerten.

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

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.

jannes

Avatar von jannes

Anmeldungsdatum:
11. Januar 2007

Beiträge: 77

Versuchst du etwa gerade pkill nach zu programmieren? 😉

Ein Python-Script kann man zum Beispiel so beenden:

pkill -f script.py


-f bewirkt, dass auch die commandline überprüft wird.

Grüße,
Jannes

ThunderWar

(Themenstarter)
Avatar von ThunderWar

Anmeldungsdatum:
28. August 2007

Beiträge: 278

Wohnort: Berlin

audax hat geschrieben:

anderes script:

import os,signal
os.kill(int(open('script.pid')), signal.SIGTERM)

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!

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Hab auch das .read() vergessen 😉

Antworten |