2016-10-02 122 views
0

我在Linux中使用簡單的python.py腳本。我需要運行一個while/counter循環,並希望通過使用/ any終端命令立即停止循環。我需要使用Screen來運行腳本。簡單地停止Screen會話不起作用 - 它只會停止循環中的當前進程,然後繼續進行下一個進程。終端命令必須優先針對所討論的循環。嘗試/除了循環與bash終端命令作爲中斷

我/在尋找一個嘗試除循環:

x = 1 
y = 100 
try: 
    while x < y: 
     process x 
     time.sleep(10) 
     x = x + 1 
except ? 

我不知道從哪裏開始。我需要實施方面的幫助,或者可能是更好的方法來做到這一點。

+1

喜歡的東西[本](http://stackoverflow.com/questions/13180941/how-to-kill-a-while-loop-with-a-keystroke)? – Murillio4

+0

差不多。我通過鍵盤中斷了解了這個想法,但是腳本實際上是通過ssh2_exec從php觸發的。我希望能夠使用exec或ssh2_exec來終止腳本/循環。 –

+0

是否可以插入一個字母呢? – Murillio4

回答

0

如果這是linux,那麼你可以使用操作系統信號。 只需創建一個引發異常並捕獲該異常的信號處理程序。 與

signal.signal(signal.SIGINT, handler) 

註冊信號處理程序這將註冊處理函數,有史以來SIGINT發送到進程ID被調用。

import signal, time 
class InterruptException(Exception): 
    pass 

def handler(signum, frame): 
    raise InterruptException("Recieved SIGINT") 


# Set the signal handler 
signal.signal(signal.SIGINT, handler) 

x = 1 
y = 100 
try: 
    while x < y: 
     print x 
     time.sleep(10) 
     x = x + 1 
except InterruptException: 
    print "Iterrupted" 

從bash,那麼你可以使用

kill -2 PID 

其中PID是運行腳本的進程ID

你總是可以啓動和慶典扼殺

python my.app & 
MY_PID=$! 
kill -2 $MY_ID