#python #apscheduler
#python #apscheduler
Вопрос:
долгое время искал ответ, поэтому я обратился сюда! Это выдает мне ошибку «Недопустимый индекс» для sched.start()!
import random
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
import smtplib
import email
def randEmail():
#Gets randLine
file_object = open("lyrics.txt", "r")
randLine = random.randint(1, 10)
for i, line in enumerate(file_object):
if i == randLine:
break
#line = randomly generated line
file_object.close()
#Email
emails = [ 'emails']
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('login', 'password')
server.sendmail('login',emails, line)
server.quit()
#Prints to notepad saying completed
Date = datetime.datetime.now()
with open("Server_Quit.txt", "r ") as ServerQuit:
ServerQuit.write("Server has quit at " str(Date))
ServerQuit.close()
#Unsure whether working
#sched.Scheduler()
#sched.start()
#sched.add_interval_job(randEmail, hours=24, start_date='2016-10-10 18:30')
sched = BlockingScheduler()
@sched.randEmail('cron', day_of_week='mon-fri', hour=18, minutes=30)
sched.start()
Я ценю любую помощь! Я изо всех сил старался заставить это работать самостоятельно и сам разобрался со всеми остальными проблемами, но не могу заставить это работать. Кроме того, если я хочу, чтобы это запускалось на моем ПК и выполнялось каждый день, могу ли я просто добавить его в процессы запуска, и при запуске моего ПК запустится планировщик?
Ответ №1:
Вы можете добавить задание в планировщик, украсив функцию с scheduled_job
помощью декоратора:
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
# minute=30 not minutes=30
@sched.scheduled_job('cron', day_of_week='mon-fri', hour=18, minute=30)
def randEmail():
#Gets randLine
with open("lyrics.txt", "r") as file_object:
randLine = random.randint(1, 10)
for i, line in enumerate(file_object):
if i == randLine:
break
#line = randomly generated line
#Email
emails = [ 'emails']
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('login', 'password')
server.sendmail('login', emails, line)
server.quit()
#Prints to notepad saying completed
Date = datetime.datetime.now()
# You don't have to close the file if you use the with statement
with open("Server_Quit.txt", "r ") as ServerQuit:
ServerQuit.write("Server has quit at " str(Date))
sched.start()
Вы также можете использовать add_job
метод:
sched.add_job(randEmail, 'cron', day_of_week='mon-fri', hour=18, minute=30)
sched.start()
Я не вижу никаких причин, по которым он не будет работать как процесс запуска.
Комментарии:
1. Теперь я получаю «ImportError: нет модуля с именем scheduler», который я не могу исправить:/ Попытался установить / удалить Apsheduler, и это не сработает.
2. Где происходит этот импорт? Я не вижу этого в вашем вставленном коде.
3. «from apscheduler.schedulers.blocking import BlockingScheduler» прямо вверху. Вместо использования apscheduler я использую планировщик задач Windows, потому что, похоже, я не могу заставить его работать.