【发布时间】:2017-08-11 19:15:07
【问题描述】:
我有一个名为“script.sh”的脚本,其内容是:
#!/bin/sh
export A=5
我想从 within python(实际上是 iPython)执行这个脚本并读取变量 'A'。
import os
import subprocess
subprocess.call('./script.sh')
A=os.environ['A']
不幸的是,这似乎不起作用,给我一个找不到 A 的错误。如果我理解正确的话,子进程实际上是在与 os.environ 查询的 shell 不同的 shell 中运行的。但是为什么我不能运行类似的东西:
subprocess.call('echo $A')
?
我应该改变什么来完成这项工作?一般来说,我只是想从脚本中获取“A”的值,最好是通过某种形式的shell执行脚本(实际脚本很长)。
要了解更多信息,该脚本将包含登录凭据,因此理想情况下,我想要一种安全、简约的方式来访问它们的值。
【问题讨论】:
-
您无能为力。子外壳不能在其父外壳中设置环境变量。
-
@DanielRoseman:对,我刚刚添加了一个编辑。有没有办法从子进程外壳访问它?那是我没有得到的部分
-
是的,您在
subprocess.call生成的shell 中成功设置了环境变量,然后在您的脚本运行后立即消失。 -
子进程每次都使用不同的shell实例。
-
os.environ在第一次导入os时被捕获。即使它不是子进程,它也行不通。 docs.python.org/3/library/os.html#os.environ
标签: python bash subprocess