从另一个python文件获取变量而不导入

时间:2015-10-19 16:52:02

标签: python

我试图为我的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:name' python_vars'未定义'

Tbh,这似乎是一种可怕的方式,是否有更简单的方法从文件中获取变量?

在php中我会做一些类似的事情 在循环中包含(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)

2 个答案:

答案 0 :(得分:1)

您可以使用execfile评估Python文件的内容。

e.g。说这是内容-(void)registarPushNotification:(UIApplication*)application { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; [application registerUserNotificationSettings:mySettings]; [application registerForRemoteNotifications]; } else { [application registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; } }

vars.py

然后git_branch = 'feature/awesome' 可以:

script.py

当然这只是在全局范围内进行了评估,这可能有点危险,所以更安全的选择是传入一个dict来存储在execfile('./vars.py') print git_branch 评估的全局变量:

vars.py

答案 1 :(得分:-2)

您需要实际获取对模块的引用才能重新加载它:

# First:
import python_vars

# Then:
do_something_with(python_vars.git_branch)

# Later on
reload(python_vars)