Iman
Iman

Reputation: 1297

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

Upvotes: 2

Views: 772

Answers (1)

Iman
Iman

Reputation: 1297

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

Upvotes: 1

Related Questions