Попытка заставить программу Python выполнить задачу в определенное время, используя datetime, но она не работает, никаких ошибок не выводится - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу запланировать определенную задачу из 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 работают правильно, но когда наступает время запуска, программа продолжает печатать «еще нет». Есть ли способ это исправить?

Edit: я попробовал предложения, которые Prune сказал в разделе ответов, и я получил ошибку при попытке преобразовать str obj в datetime obj, сказав, что формат неправильный. Вот строка кода: start_time = datetime.strptime("2018-9-12 20:00:00.000000", '%Y, %m, %d, %H, %M, %S, %f')

Редактировать 2: мой код наконец работает! Спасибо Чернослив!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Файл, который вы берете в качестве ввода, будет содержать символы EOL (конец строки) в конце файла. Сначала попытайтесь удалить эти символы (\ n \ r и т. Д.).

0 голосов
/ 13 сентября 2018

У вас есть две проблемы:

  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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...