簡體   English   中英

從另一個python文件獲取變量而不導入

[英]Getting variables from another python file WITHOUT importing

我正在嘗試為我的jenkins服務器編寫一個清理腳本。 在沒有涉及太多細節的情況下,我想從每個docroot中的文件中獲取一個變量,並在for循環中將其與某些內容進行匹配。

所以,看似每一個谷歌的結果告訴我,我嘗試將docroot添加到sys.path.append(docroot),然后使用imp查找模塊,使用它導入它

imp.find_module('python_vars')
from python_vars import git_branch

並使用了變量。

這里的問題是它適用於第一個,但它已經加載,並且在循環中不會改變。 所以我試圖在每次迭代結束時從sys.path中刪除docroot,然后使用下一個模塊重新加載模塊

reload('python_vars')
from python_vars import git_branch

這給了我一個'reload()參數必須是模塊'。

reload(python_vars)
from python_vars import git_branch

給我'NameError:名稱'python_vars'未定義'

Tbh,這似乎是一種可怕的方式,是不是有更簡單的方法從文件中獲取變量?

在php中,我只是在循環中執行類似include(docroot)的操作,它會覆蓋內存中的變量並完成。

這是完整的循環,我完全清楚這是垃圾,但我現在只是想嘗試一下。

if os.path.exists(docroot):
        sys.path.append(docroot)
        # If docroot exists need to check if it is meant to
        import imp
        try:
                imp.find_module('python_vars')
                from python_vars import git_branch
                remove_project = check_for_git_branch(docroot, git_branch)
        except ImportError:
                remove_project = True
                print 'importerror'
        try:
                imp.find_module('python_vars')
                reload(python_vars)
                from python_vars import git_branch
        except ImportError:
                print 'nope'

        sys.path.remove(docroot)

您可以使用execfile評估Python文件的內容。

例如,這是內容vars.py

git_branch = 'feature/awesome'

然后script.py可以這樣做:

execfile('./vars.py')
print git_branch

當然這剛剛在全局范圍內進行了評估,這可能有點危險,所以更安全的選擇是傳入一個dict來存儲在vars.py評估的全局變量:

vars = {}
execfile('./vars.py',vars)
print vars['git_branch']

您需要實際獲取對模塊的引用才能重新加載它:

# First:
import python_vars

# Then:
do_something_with(python_vars.git_branch)

# Later on
reload(python_vars)

暫無
暫無

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

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