python怎么通过键盘中断程序_Python:无法用键盘中断终止进程?

我有一位装饰师这样写道:import threading

from time import sleep

from functools import wraps

import sys

import os

def repeat_periodically(f):

""" Repeat wrapped function every second """

@wraps(f)

def wrap(self, *args, **kwargs):

def wrap_helper(*args, **kwargs):

try:

threading.Timer(1.0, wrap_helper).start()

f(self)

except keyboardInterrupt:

try:

sys.exit(1)

except:

os._exit(1)

wrap_helper()

return wrap

我不确定它是否每次调用它自己时都继续打开一个新线程,但是不管怎样,当我点击CTRL + C时,我无法终止该进程。我还在我修饰过的函数中添加了相同的try-except块:

^{pr2}$

我的程序继续运行,我在终端上看到的只是^C

换句话说,它只是保持日志记录,即使我试图用CTRL + C杀死它。在

更新:

我要指出的是,上述过程是从另一个线程开始的:tasks = [

{'target': f, 'args': (arg1)},

{'target': g},

]

for task in tasks:

t = threading.Thread(**task)

t.start()

特别是第二个任务会启动计时器。但是,如果我设置t.daemon = True,进程只运行一次并退出。第一个任务使用watchdog。我基本上使用了watchdog文档中的示例代码:def watch_for_event_file(Event):

path = sys.argv[1] if len(sys.argv) > 1 else '.'

event_handler = LoggingCreateHandler(Event)

observer = Observer()

observer.schedule(event_handler, path)

observer.start()

try:

while True:

time.sleep(1)

except KeyboardInterrupt:

observer.stop()

observer.join()

(很抱歉所有更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值