Python在任何脚本之前运行

时间:2015-12-11 16:26:12

标签: python dependency-injection atexit python-inject

在Python中,是否有像atexit这样的类似内容。 Atexit意在使用“拆除”。我需要像“设置”这样的东西。在执行此setUp的任何脚本之前,将执行该操作。

修改

我应该指出,我有几个小脚本,我是单独执行的。所有这些脚本都连接到相同的逻辑。我想在我们的项目中引入依赖注入,例如在运行每个脚本之前,需要配置python-inject。我不想在所有脚本的开头设置相同的inject.configure(myConfiguration)只是为了设置它。

现在我要看看@en_Knight关于PYTHONSTARTUP的建议,然后再回来。

@en_Knight提供的关于PYTHONSTARTUP的内容肯定会起作用。虽然我拥有所有的部署能力:]我觉得这也不是一个好主意。我解决了修改 python-inject

源代码的问题

谢谢你的帮助!

1 个答案:

答案 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环境,它可能会更贴近您正在寻找的内容并且可能是可行的。