Ответ 1
printit(sometext)
не является вызываемым, это результат вызова.
Вы можете использовать:
lambda: printit(sometext)
Что называется вызываемым позже, что, вероятно, сделает то, что вы хотите.
Я использую apscheduler, и я пытаюсь передать параметры функции обработчика, которая вызывается при запуске запланированного задания:
from apscheduler.scheduler import Scheduler
import time
def printit(sometext):
print "this happens every 5 seconds"
print sometext
sched = Scheduler()
sched.start()
sometext = "this is a passed message"
sched.add_cron_job(printit(sometext), second="*/5")
while True:
time.sleep(1)
Выполнение этого дает мне следующую ошибку:
TypeError: func must be callable
Можно ли передавать параметры в обработчик функции. Если нет, есть ли альтернативы? В принципе, мне нужно, чтобы каждое запланированное задание возвращало строку, которую я передаю, когда создаю расписание. Спасибо!
printit(sometext)
не является вызываемым, это результат вызова.
Вы можете использовать:
lambda: printit(sometext)
Что называется вызываемым позже, что, вероятно, сделает то, что вы хотите.
Так как это первый результат, который я обнаружил при наличии той же самой проблемы, я добавляю обновленный ответ:
В соответствии с docs для текущего apscheduler (v3.3.0) вы можете передать аргументы функции в функции add_job()
.
Таким образом, в случае OP это будет:
sched.add_job(printit, "cron", [sometext], second="*/5")