我正在嘗試爲我的jenkins服務器編寫一個清理腳本。沒有進入太多細節,我想從每個docroot中的文件中獲取一個變量,並在for循環中將其與某些內容匹配。從另一個python文件獲取變量無需導入
所以,看似每一個谷歌的結果告訴我,我嘗試添加的文檔根目錄到sys.path.append(文檔根目錄),然後用小鬼找到模塊,採用
imp.find_module('python_vars')
from python_vars import git_branch
其導入並使用該變量。
這裏的問題是,它適用於第一個,但它已經加載,並不會在循環中更改。所以我想在每次迭代的末端,除去從sys.path中的文檔根目錄,然後重新加載模塊使用
reload('python_vars')
from python_vars import git_branch
下一個這給了我一個「重載()的參數必須是模塊」。而
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)
所以我不得不也許什麼也不做登記,作爲AR功能添加eference? –
@MichaelMallett不,只是導入模塊,因爲我告訴你。你能發佈你的完整代碼嗎?你提到了一個循環,但是我沒有在你發佈的代碼中看到一個循環。 –
啊道歉,當你說我需要獲取一個參考時,我認爲以你所處的方式傳遞變量的行爲是在做某件特定的事情。因此,導入完整的文件,而不是變量,並將'check_for_git_branch(docroot,git_branch)'改成'check_for_git_branch(docroot,python_vars.git_branch)',然後重新加載就足夠了? –