Python 2.7从bash中读取导出的变量

时间:2015-08-12 19:09:20

标签: python bash python-2.7 subprocess

我有一个调用bash脚本的python2.7脚本,在bash脚本中我正在导出2个变量我试过$resampledImage = imagecreatetruecolor( 180, 109 ); imagealphablending( $resampledImage, FALSE ); imagesavealpha( $resampledImage, TRUE ); declare -x,然后我正在尝试使用export在python脚本中读取此变量,我也尝试使用os.getenv但每次都获得os.environ类型。 以下是我的脚本片段:

的Python:

None

击:

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

1 个答案:

答案 0 :(得分:1)

来自os.environ的文档:

  

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

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

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

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