2012-03-01 3 views
2

У меня есть файл python, который заставлен спать некоторое время, а затем завершает некоторый процесс. Но если пользователь передумал и хочет завершить мою программу на питоне, он должен перейти на системный монитор . потому что экземпляр спит.убивающий процесс python во время сна

import subprocess 
import os 
import signal 
import datetime 
import time 
def kill(): 
    time.sleep(3600) #sleep for 1 hour 
    #here goes terminating, for example "gedit" process after sleeping 
    proc = subprocess.Popen(["pgrep", "gedit"], stdout=subprocess.PIPE) 
    for pid in proc.stdout: 
     os.kill(int(pid), signal.SIGTERM) 
if __name__ == "__main__": 
    kill() 

Я знаю, что мне нужно создать другой процесс, чтобы убить этот спящий, если пользователь хочет, но я не могу понять, как это сделать. Помогите пожалуйста

+1

'subprocess.call ([ 'pkill', 'Gedit'])' вместо 'pgrep' – jfs

ответ

1

В среде командной строки можно прервать скрипт, используя Ctrl+C (SIGINT):

$ python -c'import time; time.sleep(300)' 
^CTraceback (most recent call last): 
    File "<string>", line 1, in <module> 
KeyboardInterrupt 
+0

я сделал мой исполняемый файл для пользователя. Он запускает его как doube-click. Без терминала. Постскриптум спасибо, капитан :) – Feanor

+1

@Feanor: вы можете показать графический интерфейс с кнопкой «Отмена», например, [countdown.py] (https://gist.github.com/1951815) – jfs