【问题标题】:How to display a message if user presses CTRL C or uses keyboard Interupt? [duplicate]如果用户按下 CTRL C 或使用键盘中断,如何显示消息? [复制]
【发布时间】:2016-11-29 08:04:39
【问题描述】:

每次我在运行程序时按 CTRL-C,它都会显示正在执行的行,然后说:

Keyboard Interrupt

但是,我正在运行一个将信息附加到文本文件的程序。如果有人在此期间按下 CTRL-C,它只会附加代码在被中断之前必须执行的操作。

我听说过try and except,但是如果我在开始时调用它并且有人在尝试阶段按下 CTRL C 会起作用吗?

我如何做到这一点,如果在程序中的任何时候有人按下 CTRL-C,它就不会运行程序,恢复它到目前为止所做的一切并说:

Exiting Program

【问题讨论】:

  • 您需要捕获 ^C 处理程序并实现一个关闭函数来处理它。
  • 您能否将其发布为答案并描述您的意思。
  • stackoverflow.com/questions/4205317/… 这是一种处理方法:) 稍微搜索一下
  • 这并没有告诉我如何恢复代码,就好像它从未运行过一样。

标签: python try-catch keyboardinterrupt


【解决方案1】:

自己试一试:

这可行(如果代码在您的机器上执行得太快,请在 for 循环迭代器中添加一个零):

a = 0

try:
    for i in range(1000000):
        a = a + 1
except (KeyboardInterrupt, SystemExit):
    print a
    raise

print a

这不起作用,因为数据保存在中间的文件中。 try 块不会撤消将数据保存到文件中。

a = 0

try:
    for i in range(1000000):
        if a == 100:
            with open("d:/temp/python.txt", "w") as file:
                file.write(str(a))

        a = a + 1
except (KeyboardInterrupt, SystemExit):
    raise

这行得通。数据仅在最后保存。

a = 0

try:
    for i in range(1000000):
        a = a + 1
except (KeyboardInterrupt, SystemExit):
    raise

with open("d:/temp/python.txt", "w") as file:
    file.write(str(a))

因此准备try 块中的信息并在之后保存。

另一种可能:用原始数据保存一个临时备份文件,并将备份文件重命名为 except 块中的原始文件名。

【讨论】:

  • 谢谢。一有机会我会试试的
  • 当我写入文件需要一些时间。如果它生成并准备好信息,然后当它在 except 之后开始写入并且有人按 ctrl-c 时会怎样?
  • 嗯,在某些时候你必须开始写入文件。如果在写入新数据之前擦除旧文件内容,它们就会丢失。如果这对您来说还不够,请保留一个备份文件,直到程序结束。或者将新数据追加到文件末尾,并在末尾从文件中删除旧内容。但是,删除备份文件或删除旧内容也可能需要一些时间;如果此时按下 Ctrl+C,您也无法撤消。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
相关资源
最近更新 更多