如何在 Heroku 上通过 python 代码更新环境变量?
How to update environment variables through python code on Heroku?
我想做的是:
- 我正在尝试制作一个 Telegram 机器人,它会在特定网页上有新 post 更新时向我发送消息。
- 我编写了代码并将其上传到 Heroku。
- 该机器人使用 Heroku Scheduler 设置为每 10 分钟启动一次,这样它就会检测到每 10 分钟更新一次的任何新 post。
现在的问题是:
代码设置为记住最新的 post 号码,如果前一个机器人 运行 和当前 运行 之间没有任何更新,则不会发出任何警报].
如果之前运行中保存的post号码与当前运行中最新的post号码匹配,则机器人不应该报警我并继续执行计划的过程(每 10 分钟检查一次新的 posts)。
这就是我为完成这项工作所做的
import os
latest_num = os.environ.get("POST_ID")
post_num = posts.find("td", {"class" : "no"}).text.strip()
if latest_num != post_num :
latest_num = post_num
os.environ["POST_ID"] = latest_num
我假设如果通过 Heroku 上的环境变量将前一个 运行 的最新 post 数字保存为“POST_ID”,它应该出现在当前运行,当使用os.environ
从环境变量中读取"POST_ID"
时,是latest_num
的值。
但问题是,在当前运行完成后,os.environ["POST_ID"]
似乎没有覆盖它的值。 Heroku调度器每次启动程序时,'latest_num'
值为0
,与Heroku设置中的默认值"POST_ID"
相同。
因此,即使没有新的 post,机器人也会不断向我发送消息,因为 'latest_num'
始终不匹配 'post_num'
。
我该如何解决这个问题?实际上,我不知道是否可以通过python 代码设置环境变量。请告诉我是否有更好的方法来完成这项工作。
您可以将之前的 post id
保存在文本文件或 python variable
中。我更喜欢将它保存在文本文件中,因为如果你重新启动或关闭你的程序,那么它会忘记所有以前的东西,但它不适用于文本文件。
这是代码:首先在保存时执行此操作:
post_num = posts.find("td", {"class" : "no"}).text.strip()
with open("pre.txt","wb") as f:
f.write(post_num)
现在你的刮擦第二次然后这样做:
post_num = posts.find("td", {"class" : "no"}).text.strip()
with open("pre.txt","rb") as f:
pre_num=f.read()
if post_num!=pre_num:
#Do Something
with open("pre.txt","wb") as f:
f.write(post_num)
else:
#Do something
我想做的是:
- 我正在尝试制作一个 Telegram 机器人,它会在特定网页上有新 post 更新时向我发送消息。
- 我编写了代码并将其上传到 Heroku。
- 该机器人使用 Heroku Scheduler 设置为每 10 分钟启动一次,这样它就会检测到每 10 分钟更新一次的任何新 post。
现在的问题是:
代码设置为记住最新的 post 号码,如果前一个机器人 运行 和当前 运行 之间没有任何更新,则不会发出任何警报].
如果之前运行中保存的post号码与当前运行中最新的post号码匹配,则机器人不应该报警我并继续执行计划的过程(每 10 分钟检查一次新的 posts)。
这就是我为完成这项工作所做的
import os latest_num = os.environ.get("POST_ID") post_num = posts.find("td", {"class" : "no"}).text.strip() if latest_num != post_num : latest_num = post_num os.environ["POST_ID"] = latest_num
我假设如果通过 Heroku 上的环境变量将前一个 运行 的最新 post 数字保存为“POST_ID”,它应该出现在当前运行,当使用
os.environ
从环境变量中读取"POST_ID"
时,是latest_num
的值。但问题是,在当前运行完成后,
os.environ["POST_ID"]
似乎没有覆盖它的值。 Heroku调度器每次启动程序时,'latest_num'
值为0
,与Heroku设置中的默认值"POST_ID"
相同。因此,即使没有新的 post,机器人也会不断向我发送消息,因为
'latest_num'
始终不匹配'post_num'
。
我该如何解决这个问题?实际上,我不知道是否可以通过python 代码设置环境变量。请告诉我是否有更好的方法来完成这项工作。
您可以将之前的 post id
保存在文本文件或 python variable
中。我更喜欢将它保存在文本文件中,因为如果你重新启动或关闭你的程序,那么它会忘记所有以前的东西,但它不适用于文本文件。
这是代码:首先在保存时执行此操作:
post_num = posts.find("td", {"class" : "no"}).text.strip()
with open("pre.txt","wb") as f:
f.write(post_num)
现在你的刮擦第二次然后这样做:
post_num = posts.find("td", {"class" : "no"}).text.strip()
with open("pre.txt","rb") as f:
pre_num=f.read()
if post_num!=pre_num:
#Do Something
with open("pre.txt","wb") as f:
f.write(post_num)
else:
#Do something