Python在任何脚本之前运行

2024-10-02 08:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,是否存在类似于atexit的内容。Atexit是用来“拆卸”的。我需要一些像“设置”之类的东西。在我运行这个设置的任何脚本之前都会被执行。在

编辑

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

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

解决方案 @en_nuknight提供的关于PYTHONSTARTUP的东西肯定会起作用。虽然我有所有的部署能力:]我觉得这也不是个好主意。我解决了修改python inject的源代码的问题

谢谢你的帮助!在


Tags: 项目脚本编辑内容configure逻辑解决方案建议
1条回答
网友
1楼 · 发布于 2024-10-02 08:23:33

请注意,当您使用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似乎是去的地方。place1的缺点是任何导入主函数的文件都会意外地调用atenter。如果在某些平台上进行多线程处理,这也会导致问题。What does if __name__ == "__main__": do?

place3的问题是,如果您在另一个文件中的主函数之上放置一个包装器(比如“RunExamples”命令行实用程序或GUI),则不会调用atenter。在文档中指定main不应该被调用两次就足够了,尽管这也可以强制执行。在

如果您正在寻找更优雅的外观,您可以创建一个“atenter”装饰器,并用它包装您的主要函数。使用singleton模式或类似的模式,您可以确保它只执行一次,不管调用了多少次


有一种替代方法。From the python docs

PYTHONSTARTUP

If this is the name of a readable file, the Python commands in that file are executed before the first prompt is displayed in interactive mode. The file is executed in the same namespace where interactive commands are executed so that objects defined or imported in it can be used without qualification in the interactive session. You can also change the prompts sys.ps1 and sys.ps2 in this file.

修改此环境变量将允许您在指定的环境下执行函数。这不是一个好的部署策略(它取决于本地计算机上满足的几个条件,包括python的运行模式)。但是,如果您在部署时对python环境有很强的控制能力,那么它可能更符合您的需要。在

相关问题 更多 >

    热门问题