我有一个调用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
答案 0 :(得分:1)
来自os.environ
的文档:
第一次导入os模块时捕获此映射,通常在Python启动期间作为处理site.py的一部分。除了通过直接修改os.environ所做的更改之外,在此之后对环境所做的更改不会反映在os.environ中。
所以基本上当你的bash脚本改变环境然后回到你的python脚本时,环境变量不会刷新。很讨厌。正如文档所说,最好的解决方案是直接将变量添加到环境列表中,例如:
os.environ['PATH'] = '/bin/'
如何实现这一点取决于你,管道是一种相当不错的方式。虽然烦人。不幸的是,没有办法“刷新”环境列表。在很多情况下,最好只删除bash脚本并以某种方式使其适应python脚本。