如何从子进程设置父进程'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
子进程有一个值必须传递给父进程。我正在使用 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