gpt4 book ai didi

python - 有没有办法在 python 中的 KeyboardInterrupt 上永不退出?

转载 作者:行者123 更新时间:2023-12-05 00:44:58 25 4
gpt4 key购买 nike

我在 python 中创建了一种交互式命令行。我有这样的事情:

def complete_menu():
while True:
cmd = input('cmd> ')
if cmd == "help":
print('help')
elif cmd == "?":
print('?')

当用户按下 CTRL-C 时,我没有退出程序,而是试图让它打印“请输入退出以退出”并返回到 while True .我现在有这样的事情:
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print('Please use exit to exit')
complete_menu()

尽管这有效,但存在许多问题。首先,当第一次按下 CTRL-C 时,它会打印出文本并完美运行。然而,当用户第二次按下 CTRL-C 时,在按下 CTRL-C 后,它会像任何其他程序一样存在一堆乱七八糟的文本。这可以解决吗?

最佳答案

更好的方法是注册一个信号处理程序:

import signal

def handler(signum, frame):
print("Please use exit to exit")
# or: just call sys.exit("goodbye")

...

def main():
signal.signal(signal.SIGINT, handler) # prevent "crashing" with ctrl+C
...


if __name__ == "__main__":
main()

现在,当您的代码中收到 Ctrl+C 时,而不是 KeyboardInterrupt引发异常,函数 handler将被执行。这是一个基本示例,自定义处理程序中的代码以执行您想要的操作。

注:我的建议是实际上让用户使用 Ctrl+C 退出,即执行您可能需要运行的任何清理代码,然后调用 sys.exit这里。需要更强信号才能杀死的程序很烦人。

关于python - 有没有办法在 python 中的 KeyboardInterrupt 上永不退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59003438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com