вызов python скрипта по расписанию
Подскажите пожалуйста, что я упускаю. С получением данных с api справился. Теперь хочу их получать через определенный промежуток времени, пусть будет каждую минуту. Решил воспользоваться schedule
import requests, time, datetime, json, schedule
class Registration:
url = 'http://127.0.0.1:8000/api/reg/'
def get_registers(self):
now = datetime.datetime.now()
date = now.strftime("%d-%m-%Y")
full_page = requests.get(self.url, auth=("admin","admin"))
pars=json.loads(full_page.content.decode('utf-8'))
a=sorted(pars, key=lambda pars: pars['time_visit'])
count=0
for i in a:
if i['date_visit']==date:
count +=1
print(i["number_car"], i['time_visit'])
schedule.every(1).minutes.do(get_registers())
while True:
schedule.run_pending()
time.sleep(1)
reg = Registration()
reg.get_registers()
пытаюсь сделать так, но в итоге ошибка TypeError: get_registers() missing 1 required positional argument: 'self'.
Ответы (2 шт):
Проверь участок кода ниже. Возможно здесь лишние пробелы в начале строк. Или наоборот их не хватает. Скорее первый вариант
schedule.every(1).minutes.do(get_registers) while True: schedule.run_pending() time.sleep(1)TypeError: get_registers() missing 1 required positional argument: 'self'Первым аргументом в методе всегда (или почти всегда) является экземпляр класса. Очевидно, в строке ниже передача экземпляра в метод отсутствует.schedule.every(1).minutes.do(get_registers())Предлагаю попробовать такой исправленный вариант
import requests, time, datetime, json, schedule class Registration: url = 'http://127.0.0.1:8000/api/reg/' def get_registers(self): now = datetime.datetime.now() date = now.strftime("%d-%m-%Y") full_page = requests.get(self.url, auth=("admin","admin")) pars=json.loads(full_page.content.decode('utf-8')) a=sorted(pars, key=lambda pars: pars['time_visit']) count=0 for i in a: if i['date_visit']==date: count +=1 print(i["number_car"], i['time_visit']) reg = Registration() schedule.every(1).minutes.do(reg.get_registers()) while True: schedule.run_pending() time.sleep(1)
в дополнение к предыдущему ответу. измените
schedule.every(1).minutes.do(reg.get_registers())
на
schedule.every(1).minutes.do(reg.get_registers)
Разница в следующем. В первом случае вы планируете выполнять результат reg.get_registers () (который равен None, поскольку вы ничего не возвращаете из этого метода) каждую минуту. Во втором случае вы планируете выполнять reg.get_registers самостоятельно каждую минуту.