2017-11-28 166 views
5

Mam skrypt Pythona, który należy uruchomić na dane wejściowe użytkownika. Otrzymam datę i godzinę od użytkownika, a skrypt uruchomi się w tym dniu.Uruchamiaj skrypt Pythona w przyszłości

import time 
from datetime import datetime 

today = datetime.today() 
enter_date = raw_input("Please enter a date:(2017-11-28): ") 
enter_time = raw_input("What time do you want to start the script? ") 

difference = enter_date - today 

time.sleep(difference) 

Po tym punkcie uruchomiona zostanie funkcja main().

Nie mogłem go uruchomić. Czy istnieje lepszy sposób na osiągnięcie tego zadania? Dzięki

+2

Utwórz zadanie w systemie operacyjnym, aby uruchomić skrypt –

+4

'enter_date' jest ciągiem, musisz przekonwertować go na obiekt daty przed obliczeniem różnicy. – Faibbus

+1

Czy jesteś w systemie Windows lub Linux (Unix)? – Isma

Odpowiedz

2
import time 
from datetime import datetime 

date_format = "%d/%m/%y %H:%M" 
today = datetime.today() 

print("Please enter date in format dd/mm/yy HH:MM") 

enter_date = datetime.strptime(
    raw_input("> "), 
    date_format) 

difference = enter_date - today 

print(difference) 


#time.sleep(difference.total_seconds()) 

Odśpij się spać, jeśli chcesz. Jest to jednak złe rozwiązanie. Powinieneś to zrobić w specyficznych dla systemu operacyjnego opcjach. Na przykład można dodać linię z ciebie skrypt cron plik na linux itp https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

0

Tu idziesz

import time 
from datetime import datetime 

today = datetime.today() 
input_date = raw_input("Please enter a date and time : 2017-12-31 18:02 : ") 

enter_date=datetime.strptime(input_date,'%Y-%m-%d %H:%M') 

difference = enter_date - today 

print difference.total_seconds() 

time.sleep(difference.total_seconds()) 

jeśli chcesz wziąć data i czas oddzielić następnie użyć

import time 
import datetime 

today = datetime.datetime.today() 
input_date = raw_input("Please enter a date 2017-12-31 : ") 
input_time=raw_input("What time do you want to start the script? 18:02 : ") 

enter_date=datetime.datetime.strptime(input_date,'%Y-%m-%d') 
enter_time=input_time.split(':') 
date_with_time = enter_date + datetime.timedelta(hours=int(enter_time[0]),minutes=int(enter_time[1])) 

difference = date_with_time - today 

print difference.total_seconds() 

time.sleep(difference.total_seconds()) 

Ale preferowanym sposobem byłoby użycie zadań cron find more here about cron

1

Asumming można wykonywać zadania cron, dobrym rozwiązaniem byłoby podzielić skrypt w dwóch częściach, jeden do żądania, gdy skrypt zostanie wykonany, a drugi do faktycznego skryptu.

Twój pierwszy skrypt utworzy crona aby zaplanować wykonanie skryptu, na które można użyć python-crontab pakiet:

pip install python-crontab 

Aby utworzyć zadanie cron:

from datetime import datetime 
from crontab import CronTab 

run_date_input = raw_input("Please enter a date (e.g. 2017-11-28): ") 
run_time_input = raw_input("What time do you want to start the script (e.g. 14:30:12)? ") 

run_date = datetime.strptime(run_date_input, "%y-%m-%d") 
run_time = datetime.strptime(run_time_input, "%H:%M:%S") 

#Access the crontab for the current user (on unix systems) 
user_cron = CronTab(user='your username') 

#Access the crontab (on windows sytems) 
user_cron = CronTab(tabfile='c:/path_to_your_tab_file/filename.tab') 

#Create a new job 
job = user_cron.new(command='python /home/your_second_script.py') 
job.setall(datetime(run_date.year, run_date.month, run_date.day, run_time.hour, run_time.minute, run_time.second)) 

Jeśli używasz Windowsa, musisz zainstalować crona dla Windows używając czegoś takiego jak cygwin lub nowego podsystemu Linux dla Windows 10.

+0

Wielkie dzięki @Isma – pydev

+1

Możesz uruchomić python-crontab na windows jako usługa, jeśli chcesz. (więcej testów byłoby świetne) zobacz https://github.com/doctormo/python-crontab#running-the-scheduler –