Atexit没有在python中注册

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atexit没有在python中注册相关的知识,希望对你有一定的参考价值。

事实证明问题不同现在我在Tkinter中有一个循环:

def main():
    #Global Variables
    windows = []
    buttons = []
    labels = []
    messageboxes = []
    global theme
    theme = 0
    listboxes = []
    global register
    register = []
    global path
    path = ""
    # Lotsa' Code
    Tkinter.mainloop()

if __name__ == "__main__":
    main()

def save_f():
    global register
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()
global register     
#At Quit
atexit.register(save_f)

atexit失败了。但是当我尝试打印寄存器时,它没有任何问题。当我把它放在Tkinter循环中时save_f工作,但atexit没有。那么有人能告诉我我做错了什么吗?

Sorry forgot to write atexit the first time. But it's in my code.

编辑:原始代码在这里

import pickle
import atexit
def save_f():
    global register
    outFile = open('Something.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()
atexit.register(save_f)
答案

看看你的代码我建议尝试这样做:

def main():
    # ... everything in main ...
    Tkinter.mainloop()

def save_f():
    outFile = open('FobbySave.txt', 'wb')
    pickle.dump(register, outFile)
    outFile.close()

#At Quit
atexit.register(save_f)

if __name__ == "__main__":
    main()

问题可能是您在运行main方法后初始化atexit。因此,在代码被杀死(并停止执行)后,您尝试添加atexit方法。

以上是关于Atexit没有在python中注册的主要内容,如果未能解决你的问题,请参考以下文章

是否可以更改使用 atexit() 注册的函数中的退出代码?

Python atexit模块

混合模式 C++/CLI 崩溃:atexit 中的堆损坏(静态析构函数注册)

atexit函数和两种特殊文件权限位

Linux - atexit()(注册终止)函数

atexit()函数