[英]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.