2017-05-29 58 views
1

我有两个剧本
1. demo.ksh
2. demo.py如何阅读变量从shell脚本出口,在python

在demo.ksh我正在导出变量

#!/bin/ksh 
TEST="Hello" 
export TEST 

在我执行demo.ksh并试图读取出口值demo.py ..

import os 
import subprocess 
cmd='. demo.ksh' #I even tried 'demo.py' (no .) 
subprocess(cmd,shell=True,stdout=subprocess.PIPE) 
print(os.getenv('TEST')) 
print(os.environ['TEST']) 

我期待

Hello 
Hello 

但要

None 
KeyError: 'TEST' 

虽然这是一个简单的练习。我无法找到正确的解决方案,请帮我解决我的代码有什么问题。

+0

为什么你不能使用脚本标准输出?使用环境变量会很困难,因为稍微难以获得另一个进程环境变量。你可以在这里阅读更多:https://stackoverflow.com/questions/5905574/how-to-get-the-environment-variables-of-a-subprocess-after-it-finishes-running –

回答

1

导出一个变量使得它可用于衍生shell进程的子进程,但不是父进程(即您的Python程序)。

要获得预期的输出尝试这样的shell脚本:

#!/bin/ksh 

TEST="Hello" 
export TEST 
python demo.py 

可以改为通过STDOUT子进程进行通信。为此,subprocess.check_output可能会有用。