簡體   English   中英

是否可以從同一腳本中永久更改Python腳本中的變量?

[英]Is it possible to permanently change a variable inside a Python script from the same script?

只是聽我說:

我想通過bash將一些參數傳遞給腳本: python my_python_script.py set_api <api_key>但我希望api_key作為永久變量存儲在同一腳本中。 我想知道是否有可能,因為我考慮了其他選擇,例如可以將變量簡單地存儲在另一個文件中,並確保我的腳本先讀取該文件。

最好/最安全的方法是什么?

盡管其他人提到的修改源文件的方法可能會起作用,但我強烈建議您研究其他解決方案,例如存儲具有正在更改的相關信息的配置文件。 如果您不想自己編寫此功能(可以和腳本位於同一目錄中的隱藏文件一樣簡單,並且包含一行包含api鍵的一行),可以使用ConfigParser等解決方案JSON ,甚至只是腌制一個對象。 當您需要訪問該信息(例如API密鑰的值)時,可以讀取配置文件。

通常,如果您需要通過值引用某些內容,則可以考慮使用字典。 例如,如果我的api密鑰是“ abc”,而不是訪問foo.abc ,我可以在foo上放置一個字典d = {"abc": value}並訪問foo.d["abc"]

再次,正如其他人提到的那樣,編寫自修改代碼通常被認為是不好的做法,因為它很難閱讀和維護。 如果您能夠寫入其中包含代碼文件的目錄,那么很少有很好的理由使用配置/持久狀態文件來修改該文件。

從理論上講,可以讓您的程序更改其自己的源代碼。 您要做的就是打開文件進行寫入,然后將所需的數據寫入其中。 作為討論在這里 ,你不能真正將數據插入文件,所以你基本上需要通過完整的源代碼加上新的分配api_key值到file.write()這將是非常麻煩的,特別是如果您的代碼很復雜。 這是有風險且並非超級優雅的解決方案的眾多原因之一。 如果您仍然想使用它,我絕對建議您將原始代碼備份到某個地方。

您嘗試執行以下操作:

def store(const_name, value):
    import re
    with open(__file__, 'r') as f:  # read source of this script
        content = f.read()
        changed = re.replace('^'+const_name+'.*$', const_name + ' = '+ str(value))
    with open(__file__, 'w') as f:  # write source of this script
        f.write(changed)

這種方法是不安全的,您不得在現實生活中使用它,因為有人可能會破壞您的腳本或將其更改為做惡作劇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM