如果我通过键盘Interupt运行了Python脚本,是否有办法从它中断的地方重新开始? (窗口)

时间:2018-09-19 14:20:55

标签: python python-3.x

我在工作中运行了一个长时间运行的脚本(不幸的是,在Windows中),我对该脚本进行了编程以打印当前的分析结果(如果使用ctrl-c)。但是,我很好奇是否在执行ctrl-c之后是否可以在脚本停止的地方再次运行该脚本?

这实际上是3个问题: -是否可以在不进行任何编程更改的情况下执行此操作? -例如我无意中按下了ctrl-c,并想追溯到它退出的地方 -我可以在Windows上使用类似ctrl-z的命令(仅在我相信的Mac上)并编写脚本以在发出问题时打印结果吗? -什么是最好的编程方式,当我使用中断命令时,自动完成我所在行(数据的大量.txt文件)的执行,将该行号存储(可能在文件中),然后在下一行与下一次执行?

谢谢!

(仅供参考:我是Python新手,我的脚本目前大约需要10分钟才能执行100万行。将来我将使用的文件通常会有100+百万行)

1 个答案:

答案 0 :(得分:1)

第一个问题的简短答案是“否”。Ctrl-C向解释器发送信号,解释器展开堆栈,为您提供堆栈跟踪,然后停止。由于无法从任何其他未捕获的异常中恢复的原因,您无法从ctrl-C中恢复。您需要的是一种快速将“矮胖子”重新组合在一起的方法。

您可以从任何时候重新开始国际象棋游戏,只需在放弃游戏之前根据您制作的图片布置棋子即可。但是用程序很难做到这一点。问题在于,知道程序停止的行号不足以重新生成当时的程序状态的足够信息:所有变量的值,堆栈的状态,已读取多少输入,等等。换句话说,图片很复杂,并且很难准确地布置作品。

如果程序正在写入Windows控制台,则可以通过按ctrl-S暂停输出,并通过按ctrl-Q重新启动输出。这些控制字符是电传打字机时代的遗留物,但是现代的终端仿真器仍然服从它们。这是无需更改程序即可执行所需操作的快速方法。不老练,但也许足够好。

如果将其输出写入文件以供以后在文本编辑器中进行检查,而不是直接写入Windows控制台,则程序的运行速度可能会快得多。

对于您的问题的全面解决方案,我很乐意推荐给新手。这个想法是将计算和显示分为两个过程。计算过程会执行其工作,并将结果逐行提供给显示过程。显示过程会监听计算过程,并将计算结果显示在屏幕上,但也可以接受暂停和恢复命令。处于暂停状态时发生的事情是设计决定。您可以决定计算过程应该阻止(更简便的选择)还是应该缓冲其结果,直到显示过程准备好再次接受它们为止(更困难的选择)。