我们可以从 ~/.bash_profile 加载环境变量而无需 source ~./bash_profile 吗?
Can we load environment variables from ~/.bash_profile without having to source ~./bash_profile?
我有一个名为 scraper.py
的 python 脚本,它在某些日子从网络上抓取信息。这些天,我使用 cronjob
将此脚本自动化为 运行。现在每次脚本 运行s 时,我都想向 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
我有一个名为 scraper.py
的 python 脚本,它在某些日子从网络上抓取信息。这些天,我使用 cronjob
将此脚本自动化为 运行。现在每次脚本 运行s 时,我都想向 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