Home > Blockchain >  Python prevent reading mouse events as KeyboardInterrupt exception
Python prevent reading mouse events as KeyboardInterrupt exception

Time:01-03

I want to write a python program (run.py) that always runs and only stops running when Ctr-C is pressed. This is how I implement it:

wrapper.py:

import subprocess
import signal
 
def sig_handler(signum, frame):
    res = input("Ctrl-c was pressed. Do you really want to exit? y/n ")
    if res == 'y':
        exit(1)
 
signal.signal(signal.SIGINT, sig_handler)

while(True):
    p = None
    p = subprocess.Popen("python run.py", shell=True)
    stdout, stderr = p.communicate()

run.py:

print('aaaaa')
print('bbbbb')

However, when I hold left-mouse and select text in the terminal that is running wrapper.py, this event is understood incorrectly as Ctr-C then the wrapper.py stop running run.py. My question is how to prevent reading mouse events as KeyboardInterrupt in python (Unix). Thanks!

Terminal

CodePudding user response:

Instead of using a module like signal to achieve this you could opt to use exceptions since it is a pretty exceptional case that your program will receive a keyboard interrupt.

#!/usr/bin/env python3
import sys

def main() -> int:
    try:
        while True:
            print(sys.argv)
    except KeyboardInterrupt as e:
        return 0

if __name__ == '__main__':
    try:
        sys.exit(main())
    except Exception as e:
        print(f'Error: {e}', file=sys.stderr)
        sys.exit(1)

CodePudding user response:

The source code has no problem. The problem is caused by dictionary software. The software has a feature of selecting word to translate. By somehow it converts the mouse event (selecting word) to Ctr-C then the program above exits. When I turn off the dictionary software, the problem disappears. I will close the thread here

  • Related