【发布时间】:2018-02-01 23:03:30
【问题描述】:
我想在终端上“命令 c”后运行一个函数。我正在使用 python 将一些数据抓取到文件中,然后我想在终止抓取过程时立即关闭并将文件推送到谷歌驱动器。我已经编写了两个不同的文件用于抓取和推送,但我想做这一切在一个文件中。如何在python中指示“命令c”的变化?如果命令 c.. 执行此操作...
任何帮助都会非常有用!谢谢!
【问题讨论】:
标签: python macos terminal google-drive-api
我想在终端上“命令 c”后运行一个函数。我正在使用 python 将一些数据抓取到文件中,然后我想在终止抓取过程时立即关闭并将文件推送到谷歌驱动器。我已经编写了两个不同的文件用于抓取和推送,但我想做这一切在一个文件中。如何在python中指示“命令c”的变化?如果命令 c.. 执行此操作...
任何帮助都会非常有用!谢谢!
【问题讨论】:
标签: python macos terminal google-drive-api
序列 ctrl+C(或 Mac 上的 command+C)导致 KeyboardInterrupt 异常待提高。
您可以通过简单的try-except 简单地捕获此异常。
例如,以下代码将运行一个需要一些时间的虚拟工作,并且在 ctrl+C 上,将停止该工作并打印其当前状态。
import time
try:
for i in range(100):
time.sleep(1)
except KeyboardInterrupt:
print(i)
请注意,正如 in the doc 所指定的,KeyboardInterrupt 异常继承自 BaseException,但 不是 继承自 Exception。
因此,except Exception 子句不会捕获 KeyboardInterrupt,而 except BaseException 会同时捕获 KeyboardInterrupt 和 Exception。
【讨论】:
try 块中,并在该块之后放置except KeyboardInterrupt 子句。我最近也做了同样的事情,运行了大量测试,结果最终提交给 Git - 我想在手动中断测试时保存部分结果。
你需要的是atexit模块https://docs.python.org/2/library/atexit.html
创建一个处理函数来完成持久化部分。用atexit注册它在出口处运行。
def goodbye(name, adjective):
print 'Goodbye, %s, it was %s to meet you.' % (name, adjective)
import atexit
atexit.register(goodbye, 'Donny', 'nice')
【讨论】: