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

How to set parent process' shell env from child process

子进程有一个值必须传递给父进程。我正在使用 python 的 subprocess.Popen 来执行此操作,但是子进程的 TEMP_VAR 在父进程的 shell?

中不可见
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 关键字参数的情况下进行进程间通信。

环境变量从parent复制到child,它们不共享,也不向另一个方向复制。 export 所做的只是在 child 中创建一个环境变量,因此它的 children 会看到它。

最简单的方法是在 child 进程中 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