首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过shell脚本运行python代码时无法读取env变量

通过shell脚本运行python代码时无法读取env变量
EN

Stack Overflow用户
提问于 2020-08-12 11:10:46
回答 2查看 280关注 0票数 1

我有一个托管在EC2实例中的python脚本(使用CI、CodeDeploy、CodePipeline)。在代码中,我将DB的路径作为env变量,如下所示:

代码语言:javascript
复制
def db_connection():
    DB_ADAPTER = os.environ.get('DB_ADAPTER')
    DB_USER = os.environ.get('DB_USER')
    DB_PASSWORD = os.environ.get('DB_PASSWORD')
    DB_HOST = os.environ.get('DB_HOST')
    DB_NAME = os.environ.get('DB_NAME')
    engine_url = DB_ADAPTER + '://' + DB_USER + ':' + \
        DB_PASSWORD + '@' + DB_HOST + '/' + DB_NAME
    eng = db.create_engine(engine_url)
    conn = eng.connect()
    print('Connected to the DB')
    return eng, conn

我启动了这个实例,运行了它,并做了nano .profile。在.profile中,我手动添加了以下行:

代码语言:javascript
复制
export DB_ADAPTER=postgresql+psycopg2
export DB_USER=dummy_user
export DB_PASSWORD=dummy_pwd
export DB_HOST=ec2-xx-xxx-xxx-xxx.eu-central-1.compute.amazonaws.com
export DB_NAME=dummy_db

当我将代码推送到GitLab回购时,CI运行,代码作为压缩文件转储到S3桶中,然后启动CodeDeploy和CodePipeline。

在这个阶段,我得到了以下错误:

start_script.sh是:

代码语言:javascript
复制
#!/usr/bin/env bash
cd /home/ubuntu/anomaly-detection/
python3.7 ad_fbprophet.py
exit

appspec.yml

代码语言:javascript
复制
version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/anomaly-detection
permissions:
- object: /
  pattern: "*"
  owner: root
  group: root
hooks:
  BeforeInstall:
    - location: /scripts/before_install.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: /scripts/start_script.sh
      runas: ubuntu

但是,当我从笔记本电脑登录到EC2实例并运行python脚本时,它运行得非常完美,没有任何错误,并给出了输出。

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-12 11:24:16

我在这里可能错了,但据我所知,通过编辑.profile文件,只有在实际登录并与编辑.profile的用户一起运行shell时,才会指定要导出的env变量。看起来,你的工作开始时是一个“根”,.profile看起来可能会完全不同。我想,在启动时,您必须“源”您感兴趣的特定配置文件,才能查看env变量。

代码语言:javascript
复制
$ source /home/your_user/.profile

或者,尝试将env变量添加到/etc/profile,而不是您的主配置文件。

票数 2
EN

Stack Overflow用户

发布于 2020-08-12 11:19:54

您必须安装python-dotenv

您可以使用以下命令来完成这一任务:

代码语言:javascript
复制
pip install python-dotenv

然后,在代码中必须添加:

代码语言:javascript
复制
from dotenv import load_dotenv

load_dotenv()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63375287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档