因此,我编写了一个脚本来汇总一些新闻通讯并通过 Telegram 发送给我。该脚本本身运行完美。现在我尝试每天早上 7 点通过 Ubun 上的 crontab 运行此脚本...
因此,我编写了一个脚本来汇总一些新闻通讯并通过 Telegram 发送给我。该脚本本身运行完美。现在,我尝试每天早上 7 点通过 Ubunutu 服务器上的 crontab 运行此脚本。日志文件看起来不错,我在脚本中使用的每个 print() 都正常显示而没有错误,但它不会发送消息。
我的 Crontab 命令:
00 12 * * * DISPLAY=:0 /usr/bin/python3 /root/data/App/Briefing/main.py >> /home/main.log &2>1
Python 脚本:
主程序
import ai as AiHandler
import mail as MailHandler
import send as Telegram
import pandas as pd
from datetime import date
def start():
files = MailHandler.scanEmails()
files = AiHandler.summarize(files)
print(files)
data = pd.read_csv('checkpoint.csv', sep=';')
checkpoint = createMsg(data)
s = f"morgentliches Briefing vom {date.today().strftime("%d.%m.%Y")}".replace(".", "\\.")
s += "\n\n\n *Die* *Lage* *am* *Morgen* *\\-* *Spiegel*\n\n\n" + createMsg(pd.read_csv('spiegel.csv', sep=';'))
s += "\n\n\n *Berlin* *\\-* *Tagesspiegel* *Checkpoint*\n\n\n" + checkpoint
s += "\n\n\n *Tech* *Update* *\\-* *ManagerMagazin* \n\n\n" + createMsg(pd.read_csv('manager.csv', sep=';'))
Telegram.sendMessage(s)
def createMsg(data):
s = ""
for i in range(5):
thema = data['Thema'][i].replace('*', '\\*')
zsm = data['Zusammenfassung'][i].replace('*', '\\*')
s += "\t" + "*" + thema + "*" + "\n"
s += zsm + "\n"
s = s.replace("-", "\\-")
s = s.replace(".", "\\.")
s = s.replace("(", "\\(")
s = s.replace(")", "\\)")
#s = s.replace("*", "\\*")
s = s.replace("!", "\\!")
return s
start()
发送.py
import telebot
def sendMessage(msg):
bot = telebot.TeleBot("XXXXXX")
bot.send_message(chat_id="@morgenbriefing", text=msg, parse_mode="MarkdownV2")
我尝试将 DISPLAY:=0 添加到 crontab 命令中,但没有帮助
我正在努力解决一个可能相当简单的问题。给定一个特定的日期时间,我如何验证这个日期(不考虑年份)是否位于其他两个日期之间?例如:
我正在努力解决一个可能相当简单的问题。给定一个特定的 DateTime
,我如何验证这个日期(不考虑其年份)是否位于另外两个日期之间?
一个例子:
DateTime toCheck = new DateTime(1900, 3, 4);
DateTime min = new DateTime(2024, 1, 1);
DateTime max = new DateTime(2024, 12, 31);
// True - 'toCheck' is between 'min' and 'max'
在上面的代码片段中, toCheck
介于 min
和 max
因为 4 月 3 日 介于 1 月 1 日 和 12 月 31 日 。我可以用类似这样的代码轻松验证这一点 new DateTime(min.Year, toCheck.Month, toCheck.Day) >= min && new DateTime(max.Year, toCheck.Month, toCheck.Day) <= max;
.
然而,我意识到当年份重叠时,情况会变得更加复杂。例如,在以下情况下, 1 月 1 日 位于 12 月 1 日 和 2 月 1 日 ,但我的检查失败了(显然)。
DateTime toCheck = new DateTime(1900, 1, 1);
DateTime min = new DateTime(2024, 12, 1);
DateTime max = new DateTime(2025, 2, 1);
// False - but should actually be True :(
我就是想不出如何写出一个通用的、万无一失的解决方案。任何帮助我都非常感谢。
链接到 dotnetfiddle.net