【问题标题】:How can I terminate a Python script manually without interrupting file output?如何在不中断文件输出的情况下手动终止 Python 脚本?
【发布时间】:2016-03-24 03:11:37
【问题描述】:

我对 Python 有点陌生,所以我想这个问题有一个简单的答案。但我似乎无法在任何地方找到解决方案。

我有一个 Python 脚本,它不断接受来自流式 API 的输入并将数据保存到文件中。

我需要停止脚本来修改代码时的问题。如果我使用 ctrl-f2,有时我会在脚本写入输出文件的过程中捕获它,并且文件最终会损坏。

有没有一种简单的方法可以手动停止 Python,让它完成当前代码行的执行?

【问题讨论】:

  • 这听起来像是signalatexit 模块的问题。也就是说,您可能需要考虑使用事务数据库来保存数据。
  • 我会第二次退出 ...
  • 谢谢。虽然我应该在问题中指定我正在使用 Pycharm 的“停止”按钮来终止脚本。而且它似乎不会被抓住,因为它会发出 sigkill 信号。是否有另一种方法可以停止发送不同信号的脚本?我试过 Ctrl-C,但它似乎不适用于 Pycharm。

标签: python terminate


【解决方案1】:

您可以捕获SIGTERMSIGINT 信号并设置一个全局变量,您的脚本会定期检查它是否应该退出。这可能意味着您需要将操作分成更小的块,以便更频繁地检查退出变量

import signal

EXIT = False

def handler(signum, frame):
    global EXIT
    EXIT = True

signal.signal(signal.SIGINT, handler)


def long_running_operation():
    for i in range(1000000):
        if EXIT:
            # do cleanup or raise exception so that cleanup
            # can be done higher up.
            return
        # Normal operation.

【讨论】:

  • 谢谢。虽然看起来 Pycharm 的停止按钮发送了一个 sigkill 信号,但此方法无法捕获。你知道是否有另一种方法可以停止发送可捕获信号的 Python 脚本?
  • 如果你从 shell 运行它,CTRL-C 将发送一个 SIGINT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
相关资源
最近更新 更多