如何从子进程设置父进程'shell env

时间:2015-05-06 10:57:23

标签: python shell subprocess inter-process-communicat

子进程的值必须传递给父进程。我正在使用python的subprocess.Popen来做这件事,但是父进程的shell中看不到子进程的TEMP_VAR

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关键字args的情况下进行进程间通信。

1 个答案:

答案 0 :(得分:1)

环境变量从父级复制到子级,不会在另一个方向上共享或复制它们。所有export都会在子项中创建一个环境变量,因此其子项将会看到它。

最简单的方法是在子进程中echo(我假设它是一个shell脚本)并使用管道在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