bash - Python 2.7 keep env variables from a subprocess -
i'm calling bash script exporting few variables, found way variables , it's working, once i'm trying add args bash script it's failing. here part of python script:
bash_script = "./testbash.sh" script_execution = popen(["bash", "-c", "trap 'env' exit; source \"$1\" > /dev/null 2>&1", "_", bash_script], shell=false, stdout=pipe) err_code = script_execution.wait() variables = script_execution.communicate()[0] this sample bash script:
export var1="test1" export var2=$var1/test2 echo "this firsr var: var1=$var1" echo "this second var: var2=$var2" once i'm changing bash_script = "./testbash.sh" bash_script = "./testbash.sh test test" i'm not getting exported variables bash script variables variable in python script. provided above sample, , of course real scripts more bigger.
if change bash_script = "./testbash.sh" bash_script = "./testbash.sh test test" name of bash_script changes "./testbash.sh test test". 'test test' not interpreted separate arguments.
instead, add arguments list being passed popen:
bash_script = "./testbash.sh" script_execution = popen( ["bash", "-c", "trap 'env' exit; source \"$1\" > /dev/null 2>&1", "_", bash_script, 'test', 'test'], shell=false, stdout=pipe) then err_code 0 (indicating success), instead of 1. it's not clear posted code want happen. test arguments ignored.
the argument received bash script, however. if instead put
export var1="$2" in testbash.sh, variables (in python script) contain
var1=test you might find more convenient use
import subprocess import os def source(script, update=true): """ http://pythonwise.blogspot.fr/2010/04/sourcing-shell-script.html (miki tebeka) http://stackoverflow.com/a/20669683/190597 (unutbu) """ proc = subprocess.popen( ". %s; env -0" % script, stdout=subprocess.pipe, shell=true) output = proc.communicate()[0] env = dict((line.split("=", 1) line in output.split('\x00') if line)) if update: os.environ.update(env) return env bash_script = "./testbash.sh" variables = source(bash_script) print(variables) which yields environment variables
{ 'var1': 'test1', 'var2': 'test1/test2', ... } in dict.
Comments
Post a Comment