2016-07-16 3 views
-1

Ich schrieb ein Python-Skript, um einen Unterprozess zu initiieren und dann nach einem Intervall von n Sekunden zu töten. Wenn ich time.sleep (n) verwende, wird der Prozess nicht beendet, aber wenn ich diesen Schlafteil entferne, wird er mit os.kill (proc.pid, signal.SIGKILL) beendet. Kann mir bitte jemand dabei helfen?Kill einen Unterprozess nach einem Zeitintervall mit Python in OS X

import time,subprocess,os,signal 

    timeLeft = 5 

    while timeLeft > 0: 
     print('Time left is ' + str(timeLeft)) 
     time.sleep(1) 
     timeLeft = timeLeft - 1 
     pass 

    proc = subprocess.Popen(['open','/Users/06 Green Day - Boulevard Of Broken Dreams.mp3']) 

    time.sleep(2) 

    os.kill(proc.pid, signal.SIGKILL) 

Ich versuchte mit proc.terminate() auch, aber vergeblich.

Antwort

0
import time,subprocess,os,signal 

proc = subprocess.Popen(["notepad.exe","data.out"]) 

timeLeft = 5 

while timeLeft > 0: 
    print('Time left is ' + str(timeLeft)) 
    time.sleep(1) 
    timeLeft = timeLeft - 1 
    pass 

os.kill(proc.pid, signal.SIGTERM) 

Wenn Sie Sie wie dieser Code neu anordnen, sollte es den Vorgang starten, zählen timeleft nach unten und dann den Prozess töten. Ich musste jedoch SIGTERM verwenden.

+0

Zuerst tat es funktionierte, als ich dies mit einer MP3-Datei versucht, zu öffnen. Die mp3 Datei wurde standardmäßig von der iTunes App geöffnet und es wurde nicht beendet, das mp3 wurde weiter abgespielt. Zweitens habe ich versucht, einen Alarm zu machen, der nach einer bestimmten Zeit beginnt und nach einer festgelegten Zeit endet, so dass die Position zum Starten des Subprozesses nicht geändert werden kann. – Prashant

+0

@ Prashant dann manuell wählen Sie die Datei, um es mit wie in meinem Beispiel zu öffnen, wählen Sie ein Programm, das korrekt heruntergefahren wird. – MadisonCooper

1

töten Sie es einfach mit sys.exit(0).

+0

hat es für mich nicht funktioniert. Die externe Anwendung läuft weiter. – Prashant