【发布时间】:2018-03-23 02:14:20
【问题描述】:
当在程序正在执行的终端窗口(具有焦点)中输入 ctrl-c 时,我希望我的程序停止执行。每个谷歌点击都告诉我这应该有效,但它没有。
首先我尝试将 try 块放在我的 main 调用的类方法中:
try:
for row in csvInput:
<process the current row...>
except KeyboardInterrupt:
print '\nTerminating program!\n'
exit()
然后我尝试将 try 块放在我的主程序中,但没有奏效:
if __name__ == '__main__':
try:
programArg = ProgramArgs(argparse.ArgumentParser)
args = programArg.processArgs()
currentDir = os.getcwd()
product = Product(currentDir, args.directory[0], programArg.outputDir)
product.verify()
except KeyboardInterrupt:
print '\nTerminating program!\n'
exit()
【问题讨论】:
-
无法复制。可能与您运行程序的方式有关。我运行它的示例:gist.github.com/anonymous/1439e9a79452feae7a65afec57eaf742 您的 csv-processing 可能没有让位,在这种情况下您没有发布相关代码。
-
你的
product.verify也处理异常吗? -
我的第一个代码示例来自 product.verify。我尝试在 main 和 product.verify 中使用 try 块运行并得到相同的结果。当我按 ctrl-c 时,它退出当前行处理并进入下一行,但不退出整个程序。
-
看起来
process the current row中的某些东西正在捕获 KeyboardInterrupt 异常。就像一个裸露的except。 -
我现在已经尝试在每个方法中使用 print 和 raise 做一个裸 except,主要是使用 print 和 exit。当我运行并执行 ctrl-c 时,我看不到任何打印语句,并且当前行的处理已结束,但在下一行继续执行。
标签: python linux keyboardinterrupt control-c