簡體   English   中英

我們可以從 ~/.bash_profile 加載環境變量而不必源 ~./bash_profile 嗎?

[英]Can we load environment variables from ~/.bash_profile without having to source ~./bash_profile?

我有一個名為scraper.py的 python 腳本,它在某些日子從網絡上抓取信息。 這些天我用cronjob自動化了這個腳本來運行。 現在每次腳本運行時,我都想向 Slack 發送通知以確保抓取成功。 所以我創建了一個不同的腳本helper_functions.py ,它具有向 Slack 發送消息的功能。 現在,因為我使用了一個無法在腳本中共享的API_KEY ,因為我將它推送到了 GitHub,所以我將它存儲在~./.bash_profile 如果我從終端執行source ~/.bash_profile ,腳本運行得非常好,但是當我關閉會話時,代碼會中斷。 那么有沒有辦法讓它在不采購 bash 文件夾的情況下工作?

以下是scraper.py的腳本

import datetime
import helper_functions as hf


hf.slack_msg("Start scrape")

class IndexSpider(scrapy.Spider):
    name = "index"
    start_urls = [
        "https://finance.yahoo.com"
    ]

    def parse(self, response):
        index = response.css("span.Trsdu\(0\.3s\)::text").getall()
        yield {
            'datetime'          : datetime.datetime.now().strftime("%Y-%m-%d %X"),
            's&p_500'           : index[0],
            's&p_500_delta'     : index[1],
            's&p_500_delta(%)'  : index[2],
            'dow_30'            : index[3],
            'dow_30_delta'      : index[4],
            'dow_30_delta(%)'   : index[5],
            'nasdaq'            : index[6],
            'nasdaq_delta'      : index[7],
            'nasdaq_delta(%)'   : index[8],
        }

hf.slack_msg("End scrape")

helper_functions.py

import json
import os

def slack_msg(msg):

    data = {
        "text" : msg
    }

    webhook = os.environ.get("SLACK_API_KEY")
    requests.post(webhook, json.dumps(data))

這是一個想法:

  • 將令牌放在自己的文件中,例如 ~/.secrets/slack_api_key.txt
  • 修改 ~/.bash_profile 做export SLACK_API_KEY=$(cat ~/.secrets/slack_api_key.txt)
  • 修改 helper_functions.py 做webhook = os.environ.get("SLACK_API_KEY") or open(os.path.expanduser("~/.secrets/slack_api_key.txt")).read().strip() ,這將首先查找環境變量,如果未定義變量,則回退到讀取文件

crontab 中的活動行將是環境設置或 cron 命令。 環境設置的形式是,

     name = value

所以你可以添加

SLACK_API_KEY='theapikey'

* * * * * scraper.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM