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