繁体   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