Search code examples
pythonsignals

Signal handler is not able to change variable


I'm trying to create a simple signal handler for my Python application but the value of exiting does not change even when I use Ctrl-C. If I put exiting, out of the main function the value changes. How can I change the value of exiting when it is inside main()? Currently, the program always prints False no matter if I press Ctrl-C or not.

import signal
import time


def main():
    exiting = False

    def handler(f, b):
        global exiting
        exiting = True
        return

    signal.signal(signal.SIGINT, handler)
    while True:
        print(exiting)
        time.sleep(1)


if __name__ == "__main__":
    main()

Solution

  • global should be included in the main function too.

    import signal
    import time
    
    
    def main():
        global exiting
        exiting = False
    
        def handler(f, b):
            global exiting
            exiting = True
            return
    
        signal.signal(signal.SIGINT, handler)
        while True:
            print(exiting)
            time.sleep(1)
    
    
    if __name__ == "__main__":
        main()