python 无法使用Ctrl-C终止Python脚本(ctrl+c 退出while True)

无法使用Ctrl-C终止Python脚本

写了一个死循环,类似:

def  function():
   while True:
       #my code

程序运行后想用ctrl+c按键停止程序,可是终止不了。以下为解决办法:

第一步:加入sys,signal模块,定义一个quit函数

import sys                                                                  
import signal
 
def quit(signum, frame):
    print ''
    print 'stop fusion'
    sys.exit()

第二步:在funtion函数中加入两行代码:

def funtion():
    signal.signal(signal.SIGINT, quit)                                
    signal.signal(signal.SIGTERM, quit)
    while True:
        #my code

另外编写代码

while True一定要有break语句

如下,如果 我们注释调 异常中的 break,我们ctrl+c 就不起作用,因为键盘KeyboardInterrupt异常在while循环中捕获,代码依旧循环。

def print_hi(name):
    print("Hi, {0}".format(name))

    while True:
        try:
            print("xxx")
            time.sleep(30)
        except:
            print traceback.format_exc()
            #break
if __name__ == '__main__':
    print_hi('中国')

我们解除调break 注释,发现ctrl +c 立马退出了程序。

在python中中断/中断time.sleep()

While 1:
    time.sleep(60)

在上面的代码中,当控件进入time.sleep函数时,需要经过整整60秒才能处理CTRL C 。

如上面描述,我们用try 捕获 KeyboardInterrupt 中断,然后直接break,就可以立即处理停止程序。

def print_hi(name):
    print("Hi, {0}".format(name))

    while True:
        try:
            print("xxx")
            time.sleep(60)
        except:
            print traceback.format_exc()
            break
if __name__ == '__main__':
    print_hi('中国')
### 回答1: 在 Python 中可以使用第三方库 "pyautogui" 来监控鼠标并读取组合键 CTRL+C。首先需要安装 "pyautogui" 库,可以使用 pip 安装: ``` pip install pyautogui ``` 然后在代码中导入 "pyautogui" 库,使用 "pyautogui.hotkey()" 函数来监听组合键。例如: ```python import pyautogui def on_press(key): try: if key.char == 'c' and key.ctrl: print("CTRL + C pressed") except AttributeError: pass with Listener(on_press=on_press) as listener: listener.join() ``` 这段代码会监听键盘输入,如果输入组合键 Ctrl+C 就会执行打印 "CTRL + C pressed"。 ### 回答2: 在Python中,要监控鼠标并读取组合键"CTRL + C",可以使用第三方库`pynput`来实现。 首先,需要确保已经安装了`pynput`库。如果没有安装,可以使用以下命令进行安装: ```python pip install pynput ``` 然后,使用以下代码来实现鼠标监控和读取组合键"CTRL + C": ```python from pynput.mouse import Listener from pynput import keyboard def on_press(key): # 判断是否同时按下了ctrl和c键 if key == keyboard.Key.ctrl_l or key == keyboard.Key.ctrl_r: # 设置标志位来表示按下了CTRL键 global ctrl_pressed ctrl_pressed = True if key == keyboard.KeyCode.from_char('c') and ctrl_pressed: # 如果同时按下了CTRL键和C键,则执行相应操作 print("Detected CTRL + C combination") def on_release(key): # 判断是否释放了CTRL键 if key == keyboard.Key.ctrl_l or key == keyboard.Key.ctrl_r: # 设置标志位来表示释放了CTRL键 global ctrl_pressed ctrl_pressed = False if key == keyboard.Key.esc: # 如果按下了ESC键,则停止监听 return False # 初始化CTRL键标志位 ctrl_pressed = False # 创建键盘监听器 keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release) # 启动键盘监听器 keyboard_listener.start() def on_move(x, y): # 监控鼠标移动 print('Mouse moved to {0}'.format((x, y))) def on_click(x, y, button, pressed): # 监控鼠标点击 if pressed: print('Mouse clicked at {0}'.format((x, y))) def on_scroll(x, y, dx, dy): # 监控鼠标滚动 print('Mouse scrolled at {0}'.format((x, y))) # 创建鼠标监听器 mouse_listener = Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) # 启动鼠标监听器 mouse_listener.start() # 主线程继续执行其他操作 while True: # 防止主线程退出 pass ``` 上述代码通过`pynput`库分别监听键盘和鼠标的事件。在键盘事件的处理函数中,判断了是否同时按下了CTRL键和C键,如果是,则输出"Detected CTRL + C combination"。在鼠标事件的处理函数中,分别输出了鼠标移动、点击和滚动的位置。 需要注意的是,由于监听器是在后台持续运行的,因此在最后使用一个无限循环来防止主线程退出。如果需要停止监听,可以按下"ESC"键。 ### 回答3: 要监控鼠标并读取组合键 CTRL+C ,可以使用 Python 的第三方库 pyautogui 来实现。 首先,我们需要安装 pyautogui 库。可以使用以下命令在命令行中进行安装: ``` pip install pyautogui ``` 安装完成后,我们可以在 Python 脚本中导入 pyautogui 库: ```python import pyautogui ``` 接下来,我们可以使用 pyautogui 的 `keyboard` 模块来监控键盘事件。我们可以使用 `pyautogui.keyboard.is_pressed` 方法来判断是否按下了指定的键,并结合 `pyautogui.mouse` 模块来监控鼠标位置。 下面是一个示例代码: ```python import pyautogui def monitor_mouse(): while True: if pyautogui.keyboard.is_pressed('ctrl') and pyautogui.keyboard.is_pressed('c'): x, y = pyautogui.position() print(f"鼠标位置:({x}, {y})") break monitor_mouse() ``` 在上面的代码中,`monitor_mouse` 函数会不断地循环检测键盘事件。当同时按下了 CTRL 和 C 键时,会获取当前鼠标位置并输出。 通过以上代码,我们可以实现对鼠标位置进行监控,并在按下 CTRL+C 时进行相应的操作。当鼠标位置发生变化时,可以修改代码来执行其他操作,比如模拟鼠标点击。 需要注意的是,在使用 pyautogui 进行鼠标监控时,可能会受到操作系统和用户权限的限制。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值