2015-12-11 180 views
2

在Python中,是否有類似的東西,如atexit。 Atexit旨在用於「拆卸」。我需要「設置」之類的東西。在我運行這個setUp之前的任何腳本都會被執行。Python在任何腳本之前運行

編輯

我應該指出,我有幾個小腳本我執行separatelly。所有這些腳本都連接到相同的邏輯。我想在我們的項目中引入依賴注入,但例如需要在運行每個腳本之前配置python-inject。我不想在所有腳本的開始處設置相同的inject.configure(myConfiguration),以便全部設置完成。

現在我將看看關於PYTHONSTARTUP的關於@en_Knight的建議,然後再回來。

解決方案 @en_Knight提供的關於PYTHONSTARTUP的內容肯定會有效。儘管我擁有所有的部署能力:]我覺得這也不是一個好主意。我解決了我的問題修改來源蟒蛇注入

謝謝你的幫助!

+3

你誤解了我認爲的某些東西...... atexit不是魔術......你必須定義一個函數並在你正在運行的腳本中用atexit註冊它......整個腳本在你運行時運行,所以「安裝程序「只是第一個命令 –

回答

2

請注意,當您使用atexit時,您首先需要register a function。我會建議做類似的事情來強制執行「延長」功能。

例如

# start of my code 
atenter() # place 1 

def main(): 
    atenter() # place 2 
    # run main code 

if __name__ == '__main__': 
    atenter() # place 3 
    main() 

廣場2似乎在大多數情況下,去的地方。位置1的缺點是任何導入主函數的文件都會意外地調用延遲器。如果在某些平臺上進行多重處理,這也會導致問題。 What does if __name__ == "__main__": do?

與地方3的問題是,如果你在另一個文件中放置一個包裝(比如「RunExamples」命令行實用工具,或GUI)在你主要功能的頂部,則不會調用延伸器。在文檔中指定main不應該被調用兩次可能就夠了,儘管這也可以被強制執行。

如果你正在尋找更優雅的外觀,你可以創建一個「atenter」裝飾器,並用它包裝你的主要功能。使用Singleton模式或類似的東西,你可以確保只執行一次,無論多少次它稱爲


一種替代方法。 From the python docs

PYTHONSTARTUP

如果這是一個可讀的文件的名稱,Python的在該文件中的命令之前被顯示在 交互模式的第一提示被執行。該文件在相同的命名空間中執行,其中 交互式命令被執行,以便在其中定義或導入 的對象可以在交互式會話中無限制地使用。 您還可以更改此文件中的提示sys.ps1和sys.ps2。

修改這個環境變量可以讓你在指定的環境下執行一個函數。這不是一個好的部署策略(這取決於您的本地計算機上滿足的幾個條件,包括正在運行的模式python)。但是,如果您在部署時對python環境具有強大的控制權,它可能會更貼近您正在查找的內容並且可能是可行的。

相關問題