Como posso agendar um programa python para ser executado a partir de outro programa python?

2

Estou executando um programa Python no meu servidor Linux e, dependendo de alguns dados externos, ele precisa ser executado novamente em xx minutos ou horas a partir de agora.

Então, digamos que ele seja executado às 6 da manhã e, então, tenha que ser executado novamente às 7 da manhã. Então, às 7 da manhã, ele verifica algumas coisas e tem que ser executado novamente às 15:45 e, em seguida, no dia seguinte às 2.05AM, e depois no dia seguinte às 4.05AM, etc.

Como você pode ver, não há lógica predefinida nos horários em que ela precisa ser executada, ela deve ser definida no momento em que é executada.

O único mecanismo de programação de tarefas que eu sei é crontab , bu Não sei como adicionar tarefas a ele sem executar crontab -e e além disso crontab parece mais para tarefas recorrentes e no meu caso eu adicionaria um trabalho crontab e depois de executá-lo uma vez, remova-o novamente e adicione um novo.

A única coisa que consegui criar foi a próxima alteração em um arquivo de texto, e deixar um trabalho crontab verificar isso a cada minuto para ver se é hora de executar o programa.

    
por Michel 25.03.2013 / 15:18

3 respostas

1

crontab deve ser usado para trabalhos que você deseja repetir regularmente. Uma alternativa é at . Com esse utilitário, você pode agendar trabalhos que deseja executar apenas uma vez, mas no futuro.

De dentro do python -script, você deve poder adicionar um comando à fila de at . A página de links junto com a man -page deve fornecer informações suficientes para você prosseguir.

Conforme o comentário de Michel, isso será

newruntime = (datetime.datetime.now() + datetime.timedelta(minutes=5)).strftime("%H:%M %d.%m.%Y")
command = 'echo " python mainprog.py" | at ' + newruntime
os.system(command)
    
por 26.03.2013 / 19:17
2
O módulo

Python-crontab parece promissor. Com fácil adição e remoção de tarefas.

Além disso, há um thread @ stackoverflow com um mais algumas idéias e links úteis.

    
por 25.03.2013 / 15:35
0

O time.sleep () não funciona para você? O que quero dizer é: você não pode simplesmente passar o número de segundos para esperar para dormir () e então deixar o script retomar a execução (possivelmente fazendo um sono condicional no final de um loop)? Isso reduziria o número de dependências externas exigidas por algumas das outras sugestões.

    
por 25.03.2013 / 18:38