在Python中,是否有像atexit这样的类似内容。 Atexit意在使用“拆除”。我需要像“设置”这样的东西。在执行此setUp的任何脚本之前,将执行该操作。
修改
我应该指出,我有几个小脚本,我是单独执行的。所有这些脚本都连接到相同的逻辑。我想在我们的项目中引入依赖注入,例如在运行每个脚本之前,需要配置python-inject。我不想在所有脚本的开头设置相同的inject.configure(myConfiguration)
只是为了设置它。
现在我要看看@en_Knight关于PYTHONSTARTUP的建议,然后再回来。
解 @en_Knight提供的关于PYTHONSTARTUP的内容肯定会起作用。虽然我拥有所有的部署能力:]我觉得这也不是一个好主意。我解决了修改 python-inject
源代码的问题谢谢你的帮助!
答案 0 :(得分:2)
请注意,当您使用atexit时,首先需要register a function。我建议做类似的事情来强制执行" 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位的缺点是任何导入主函数的文件都会意外调用atenter。如果在某些平台上进行多次操作,这也会导致问题。 What does if __name__ == "__main__": do?
第3个地方的问题是,如果你在另一个文件中的主函数之上放置一个包装器(如" RunExamples"命令行实用程序或GUI),则atenter会赢得&#t; t被叫。在文档中指定主要不应被调用两次可能就足够了,尽管也可以强制执行。
如果您正在寻找更优雅的外观,您可以创建一个" atenter"装饰器,并用它包装你的主要功能。使用单例模式或类似的东西,你可以确保它只执行一次,无论它被调用多少次
是的替代方法。 From the python docs
PYTHONSTARTUP
如果这是可读文件的名称,则在显示第一个提示之前,将执行该文件中的Python命令 互动模式。该文件在同一个命名空间中执行 执行交互式命令,以便定义或导入对象 在交互式会话中可以无限制地使用它。 您还可以更改此文件中的提示sys.ps1和sys.ps2。
修改此环境变量将允许您在指定的情况下执行函数。这不是一个好的部署策略(它取决于您的本地计算机上满足的几个条件,包括运行模式python)。但是,如果您在部署时能够很好地控制python环境,它可能会更贴近您正在寻找的内容并且可能是可行的。