Почему этот код APScheduler не будет работать?

#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, потому что, похоже, я не могу заставить его работать.