我在目录.sh
下有一个/me/app/environment/env_param.sh
脚本
哪个变量(尝试导出)的变量很少
export username = "uname"
export pw = "password"
。 。
还有目录/me/dbconnect.py
下的python脚本
那么如何在我的dbconnect.py
脚本中导入env_param.sh并利用'username'
中的'pw'
和dbconnect.py
变量?
答案 0 :(得分:1)
通常,您不会在Python程序中使用import
shell脚本,它们是单独的脚本引擎,具有不同的语法,运行时时间约定和环境。
常见设置包括构建“启动器”脚本-围绕着“ py”的小包装纸。
〜/ me / dbconnect.sh
source ~/app/environment/env_param.sh
~/me/dbconnect.py ...
在〜/ me / dbconnect.py内部
import os ;
...
print(os.environ['username')) ;
替代1:
您还可以考虑将env_param.sh转换为属性文件的替代方法,其中每一行都遵循keyword = value格式。在此设置中,sh脚本可以“获取” param文件(假设没有通配符等),而python程序可以将文件解析为字典。
env.param:
user=my-user-id
password=my-pass
使用此解决方案将仅支持简单常量。
有关如何将属性文件读入字典的信息,请参见Python: How to create a dictionary from properties file while omitting comments。
替代2: 如果这两个选项都不可行,请考虑在python中打开env_param.sh,然后查找与“ export var = value”匹配的行,并将其加载到字典中。不利的一面是,使用bash / shell功能的参数文件扩展名都无法使用。
答案 1 :(得分:0)
除了您发布的env_params.sh在语法上是无效的事实之外,我认为您有充分的理由要在shell文件中提供参数,但希望从Python内部读取它们。为此,建议您创建一个辅助外壳文件,该文件将提供参数文件并输出所有参数:
A()
您可以从Python程序中运行该脚本,然后解析其输出,除非某些变量扩展为包含换行符的字符串,否则输出就是一组简单的NAME = VALUE行,类似于INI文件。
这样做意味着您可以使用参数文件中的所有shell功能,例如参数扩展等,并且,如果需要,还可以在其他shell脚本中使用参数文件。