如何用键盘中断完全停止脚本

2024-05-15 15:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个运行cherrypy服务器的python脚本。当我按下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

Tags: 功能服务器脚本outputgpiotimesetupsleep
2条回答

您可以尝试使用以下方法来查找服务器的进程id,尽管这不应该一直停止脚本

ps aux | grep <name of what you executed to start the server>

然后kill -15 <pid>

您需要在Python中捕获Ctrl+C,以便可以正确终止程序并使用exit(0)或exit(1)安全退出。

注意:

退出(0)表示无任何错误/问题的干净退出

退出(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()

相关问题 更多 >