如何通过键盘中断完全停止脚本
我有一个用Python写的脚本,它在运行一个叫做cherrypy的服务器。当我按下CTRL+C的时候,服务器会停止,但脚本中的一个函数却不会停止。这个函数会继续打印传感器的数值,不管我按多少次CTRL+C都没用。我该怎么做才能确保CTRL+C可以同时停止服务器和这个函数呢?
这是我的完整脚本: http://pastebin.com/yKLt3mJN
这是我想要停止的函数:
@cherrypy.expose
def sensor(self):
import RPi.GPIO as GPIO, time, os
DEBUG = 1
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
def RCtime (RCpin):
reading = 0
GPIO.setup(RCpin, GPIO.OUT)
GPIO.output(RCpin, GPIO.LOW)
time.sleep(1)
GPIO.setup(RCpin, GPIO.IN)
# This takes about 1 millisecond per loop cycle
while (GPIO.input(RCpin) == GPIO.LOW):
reading += 1
return reading
while True:
sensorvalue= RCtime(12)
if sensorvalue > 1000:
print "switch on light"
GPIO.output(11, True) #switch on
lightstate ="On"
time.sleep(1)
else:
print "switch off light"
GPIO.output(11, False) #switch off
lightstate ="Off"
time.sleep(1)
print sensorvalue # Read RC timing using BCM pin #18, physical pin 12
return lightstate
如果我单独运行这个函数,我是可以停止它的。
^CTraceback (most recent call last):
File "RCtime.py", line 25, in <module>
print RCtime(18) # Read RC timing using pin #18
File "RCtime.py", line 16, in RCtime
time.sleep(0.1)
KeyboardInterrupt
2 个回答
0
你可以尝试一种方法,虽然这并不是你每次都应该用来停止脚本的方式。你可以先找到服务器的进程ID,使用
ps aux | grep <name of what you executed to start the server>
然后再用 kill -15 <pid>
来结束这个进程。
3
你需要在Python中捕捉到Ctrl+C这个操作,这样才能正确地结束程序,并安全地退出,使用exit(0)或exit(1)来实现。
需要注意的是:
exit(0)表示程序正常退出,没有任何错误或问题。
exit(1)表示程序遇到了一些问题或错误,所以才会退出。
例如:
#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame):
exit(0)
signal.signal(signal.SIGINT, signal_handler)
# sleep until a signal is received
signal.pause()