2015-05-06 4 views
0

Детский процесс имеет значение, которое должно быть передано в родительский процесс. Я использую python subprocess.Popen для этого, но TEMP_VAR дочернего процесса не отображается из оболочки родителя?Как установить родительский процесс 'оболочка env из дочернего процесса

import subprocess 
import sys 

temp = """variable_val""" 
subprocess.Popen('export TEMP_VAR=' + temp + '&& echo $TEMP_VAR', shell=True) 
//prints variable_val 
subprocess.Popen('echo $TEMP_VAR', shell=True) 
//prints empty string 

Есть ли способ сделать это межпроцессного взаимодействия без использования queues (или) POPEN в - stdout/stdin ключевого слова арг.

ответ

1

Переменные окружения копируются из родителя в дочерний, они не разделяются или не копируются в другом направлении. Все export does делает переменную среды в ребенке, поэтому ее дети увидят ее.

Простой способ заключается в echo в дочернем процессе (я предполагаю, что это скрипт оболочки) и захватить его в python, используя канал.

Python:

import subprocess 

proc = subprocess.Popen(['bash', 'gash.sh'], stdout=subprocess.PIPE) 

output = proc.communicate()[0] 

print "output:", output 

Bash (gash.sh):

TEMP_VAR='yellow world' 
echo -n "$TEMP_VAR" 

Выход:

output: yellow world 
Смежные вопросы