试图让一个Python程序在某个特定的时间使用datetime执行一个任务,但是它不起作用,没有错误输出

2024-04-25 22:49:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从Python中安排一个特定的任务。我从文件中读取所需的开始时间,并反复将其与当前时间进行比较。代码如下:

from datetime import datetime
import sys
current_time = datetime.now()
f = open("starttime.txt", "r")
start_time = f.read()
print(current_time)
print(start_time)

while True:
    if str(current_time) == str(start_time):
        print("the times match")
        sys.exit()
    else:
        print('not yet')

print工作正常,但当开始时间到达时,程序会继续打印“not yet”。有什么办法解决这个问题吗

编辑:我尝试了Prune在“答案”部分中所说的建议,但在尝试将str对象转换为datetime对象时出错,表示格式不正确。以下是代码行: start_time = datetime.strptime("2018-9-12 20:00:00.000000", '%Y, %m, %d, %H, %M, %S, %f')

编辑2:我的代码终于工作了!谢谢你,梅干


Tags: 对象代码fromimport编辑datetimetimesys
2条回答

你有两个问题:

  1. 更新循环中的current_time失败:在开始程序时它仍然被卡住
  2. 你在检查是否完全匹配。因为now以微秒为单位返回时间,所以在循环中不太可能找到确切的时间。相反,我建议你用一个不等式

例如:

if datetime.now() >= start_time:

。。。已经将start_time转换为datetime对象


让那三个问题。您还没有为您输入的字符串正确设置datetime转换的格式:您的字符串中有标点符号,在转换格式中没有表示。试试这个:

>>> datetime.strptime("2018-09-12 20:10:13.141593",
                      '%Y-%m-%d %H:%M:%S.%f')

结果:

datetime.datetime(2018, 9, 12, 20, 10, 13, 141593)

作为输入的文件将在文件末尾包含EOL(行尾)字符。首先尝试删除这些字符(\n\r等)

相关问题 更多 >