如何在 Heroku 上通过 python 代码更新环境变量?

How to update environment variables through python code on Heroku?

我想做的是:

  1. 我正在尝试制作一个 Telegram 机器人,它会在特定网页上有新 post 更新时向我发送消息。
  2. 我编写了代码并将其上传到 Heroku。
  3. 该机器人使用 Heroku Scheduler 设置为每 10 分钟启动一次,这样它就会检测到每 10 分钟更新一次的任何新 post。

现在的问题是:

  1. 代码设置为记住最新的 post 号码,如果前一个机器人 运行 和当前 运行 之间没有任何更新,则不会发出任何警报].

  2. 如果之前运行中保存的post号码与当前运行中最新的post号码匹配,则机器人不应该报警我并继续执行计划的过程(每 10 分钟检查一次新的 posts)。

  3. 这就是我为完成这项工作所做的

    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
    
  4. 我假设如果通过 Heroku 上的环境变量将前一个 运行 的最新 post 数字保存为“POST_ID”,它应该出现在当前运行,当使用os.environ从环境变量中读取"POST_ID"时,是latest_num的值。

  5. 但问题是,在当前运行完成后,os.environ["POST_ID"]似乎没有覆盖它的值。 Heroku调度器每次启动程序时,'latest_num'值为0,与Heroku设置中的默认值"POST_ID"相同。

  6. 因此,即使没有新的 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