【问题标题】:Python 2.7 read exported variables from bashPython 2.7 从 bash 中读取导出的变量
【发布时间】:2015-08-12 19:09:19
【问题描述】:

我有一个调用 bash 脚本的 python2.7 脚本,在 bash 脚本中我正在导出 2 个变量,我尝试使用 declare -xexport,然后我正在尝试读取这些变量在python脚本中使用os.getenv,我也尝试使用os.environ,但我每次都得到Nonetype。 这是我脚本中的一个 sn-p:

Python:

def set_perforce_workspace():
        global workspace_path
        global workspace_root_path
        script_path = "somePath"
        depot_name = "TestingTools"
        dir_to_download = "vtf"
        bash_command = "./createWorkspace.sh " + "-d " + depot_name + " -w " \
                       + PerforceUtils.WORKSPACE_NAME + " -a " + dir_to_download
        print bash_command
        print os.getcwd()
        try:
            os.chdir(script_path)
        except OSError as e:
            print "Error: {0}".format(e)
        print os.getcwd()
        return_code = call([bash_command], shell=True)
        test = os.getenv("workspace_path")
        print "this is test {0}".format(test)
        workspace_path = os.getenv("workspace_path")
        workspace_root_path = os.getenv("workspace_root_path")
        print "This is the return code {0}".format(return_code)
        print "this is the workspace path: {0}".format(workspace_path)
        print "this is the workspace root path: {0}".format(workspace_root_path)
        return return_code

重击:

declare -x workspace_root_path="$workspaceProjPath"
export workspace_path="$workspaceProjPathLocal"

【问题讨论】:

    标签: python bash python-2.7 subprocess


    【解决方案1】:

    来自os.environ 的文档:

    第一次导入 os 模块时捕获此映射,通常在 Python 启动期间作为处理 site.py 的一部分。在此时间之后对环境所做的更改不会反映在 os.environ 中,但直接修改 os.environ 所做的更改除外。

    所以基本上当您的 bash 脚本更改环境然后返回到您的 python 脚本时,环境变量不会被刷新。很烦人。正如文档所说,最好的解决方案是将变量直接添加到环境列表中,例如:

    os.environ['PATH'] = '/bin/'
    

    如何做到这一点取决于您,管道是一种相当不错的方法。虽然很烦。不幸的是,没有办法“刷新”环境列表。在很多情况下,最好只删除 bash 脚本并以某种方式使其适应 python 脚本。

    【讨论】:

    • 我不明白os.environ['PATH'] = '/bin/' 部分,有什么我能做的吗,我真的需要得到这些变量..
    • os.environ 只是一个列表。您可以通过将新索引分配给值来添加成员(即)新环境变量。所以对你来说:os.environ["workspace_path"] = "$workspaceProjPathLocal"。要从 bash 脚本中获取此 而不仅仅是在 Python 中执行,您实际上必须使用popen 将环境变量从 bash 脚本传递到 python,这里有很多很好的示例谷歌。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多