繁体   English   中英

如何从 python 中的另一个目录导入 .sh 文件

[英]How to import .sh file from another directory in python

我在目录/me/app/environment/env_param.sh下有一个.sh脚本

其中包含很少的变量(试图导出)为

export username = "uname"
export pw = "password"

. . .

和目录/me/dbconnect.py下的 python 脚本

那么如何在我的dbconnect.py脚本中导入 env_param.sh 并使用'username''pw'变量(在dbconnect.py中)?

通常,您不会import shell 脚本导入 python 程序,它们是独立的脚本引擎,具有不同的语法、运行时约定和环境。

常见设置包括构建“启动器”脚本 - 围绕您的“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 转换为属性文件的替代方法,其中每一行都遵循关键字=值格式。 在此设置中,sh 脚本可以“获取”参数文件(假设没有通配符等),并且 python 程序可以将文件解析为字典。

环境参数:

user=my-user-id
password=my-pass

使用此解决方案将仅支持简单的常量。

请参阅: Python:如何从属性文件创建字典,同时省略有关如何将属性文件读入字典的注释

备选方案 2:如果这两个选项都不实用,请考虑在 python 中打开 env_param.sh,并查找与“export var=value”匹配的行,并将它们加载到字典中。 不利的一面是,将使用 bash/shell 功能的参数文件的任何扩展都将不起作用。

除了您发布的 env_params.sh 在语法上无效这一事实之外,我认为您有充分的理由希望在 shell 文件中提供参数,但又想从 Python 中读取它们。 为此,我建议您创建一个辅助 shell 文件,该文件获取您的参数文件并输出所有参数:

 #!/bin/sh
 # Auxiliary file
 . /path/to/env_params.sh
 echo username=$username
 echo pw=$pw
 ....

您从 Python 程序运行此脚本,并解析其 output,除非某些变量扩展为包含换行符的字符串,否则它就是一组简单的 NAME=VALUE 行,类似于 INI 文件。

这样做意味着您可以使用参数文件中的所有 shell 功能,例如参数扩展等,如果需要,您还可以使用其他 shell 脚本中的参数文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM