【问题标题】:Atexit function executed at program startAtexit 函数在程序启动时执行
【发布时间】:2013-03-13 20:50:47
【问题描述】:

我有这个简单的程序:

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

atexit.register(save_f())

问题是save_f 在我运行我的程序后立即被调用。这不是我的全部代码,只是重要的部分。如果这里没有问题,请告诉我,以便我知道该怎么做。

【问题讨论】:

    标签: python atexit


    【解决方案1】:

    改变

    atexit.register(save_f())
    

    atexit.register(save_f)
    

    在您的原始代码中,save_f() 调用该函数。然后将函数的返回值(即None)传递给atexit.register()

    正确的版本将函数对象本身传递给atexit.register()

    【讨论】:

    • 奇怪,这根本没有让程序保存?
    【解决方案2】:

    您注册的是函数的返回值,而不是函数本身。不要在注册之前调用它,只需传入函数引用即可:

    atexit.register(save_f)
    

    【讨论】:

    • 奇怪,这根本不让程序保存?但是手动执行时确实会保存...
    • @madprogramer:您使用的是相对路径;您确定您正在寻找正确的位置吗?
    • @madprogramer:这不是我要问的。退出时,您确定当前工作目录没有改变吗?使用绝对路径来确保。
    • 我不明白你的意思。我在同一个文件夹中工作,保存在同一个文件夹中。绝对路径是什么意思?
    • @madprogramer:完整路径:/path/to/folder/and/filename.dat。或使用:os.path.join(os.path.dirname(os.path.abspath(__file__)), 'filename.dat') 写入与当前模块相同的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2019-08-28
    相关资源
    最近更新 更多