请注意,使用 atexit 时,首先需要注册一个函数。我建议做一些类似的事情来强制执行“atenter”功能。
例如
# start of my code
atenter() # place 1
def main():
atenter() # place 2
# run main code
if __name__ == '__main__':
atenter() # place 3
main()
在大多数情况下,地方 2 似乎是去的地方。地方 1 的缺点是任何导入你的 main 函数的文件都会不小心调用 atenter。如果在某些平台上进行多处理,这也会导致问题。if __name__ == "__main__": 做什么?
位置 3 的问题是,如果您将包装器(如“RunExamples”命令行实用程序或 GUI)放在另一个文件中的主函数之上,则不会调用 atenter。在文档中指定 main 不应该被调用两次可能就足够了,尽管这也可以强制执行。
如果您正在寻找更优雅的外观,您可以创建一个“atenter”装饰器,并用它包装您的主要功能。使用单例模式或类似的东西,你可以确保它只执行一次,不管它被调用多少次
有一种替代方法。来自 python 文档
Python启动
如果这是一个可读文件的名称,则该文件中的 Python 命令会在第一个提示以交互模式显示之前执行。该文件在执行交互式命令的同一名称空间中执行,以便在其中定义或导入的对象可以在交互式会话中使用而无需限定。您还可以更改此文件中的提示 sys.ps1 和 sys.ps2。
修改这个环境变量可以让你在指定的情况下执行一个函数。这不是一个好的部署策略(它取决于本地计算机上满足的几个条件,包括运行 python 的模式)。但是,如果您在部署时对 python 环境有很强的控制力,它可能更符合您的需求,并且可能是可行的。