2017-11-28 25 views
5

Tôi đã có một tập lệnh python cần được chạy trên đầu vào của người dùng. Tôi sẽ nhận được ngày và thời gian từ người dùng và tập lệnh sẽ chạy vào ngày đó.Chạy tập lệnh python trong tương lai

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) 

Sau khi chức năng main() này sẽ chạy.

Tôi không thể chạy. Có cách nào tốt hơn để đạt được nhiệm vụ này không? Cảm ơn

+2

Tạo một tác vụ trong hệ điều hành để chạy tập lệnh –

+4

'enter_date' là một chuỗi, bạn cần phải chuyển đổi nó thành một đối tượng ngày trước khi tính toán sự khác biệt. – Faibbus

+1

Bạn có đang sử dụng windows hoặc linux (unix) không? – Isma

Trả lời

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()) 

Ngừng ngủ nếu bạn muốn. Tuy nhiên đây là một giải pháp tồi. Bạn nên hệ điều hành các tính năng cụ thể để làm điều đó. Ví dụ bạn có thể thêm phù hợp với bạn kịch bản để cronjob tập tin trên Linux, vv https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

0

Ở đây bạn đi

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()) 

nếu bạn muốn tận ngày và thời gian tách sau đó sử dụng

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()) 

Nhưng cách ưa thích sẽ là sử dụng các công việc cron find more here about cron

1

Khi bạn có thể thực hiện các công việc cron, một giải pháp tốt đẹp sẽ là tách tập lệnh của bạn trong hai phần, một để yêu cầu khi kịch bản sẽ được thực thi và kịch bản khác là tập lệnh thực tế.

kịch bản đầu tiên của bạn sẽ tạo ra một công việc định kỳ để sắp xếp việc thực hiện các kịch bản, cho rằng bạn có thể sử dụng gói python-crontab:

pip install python-crontab 

Để tạo công việc định kỳ:

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)) 

Nếu bạn sử dụng cửa sổ, bạn cần phải cài đặt cron cho windows bằng cách sử dụng một cái gì đó như cygwin hoặc hệ thống con Linux mới cho Windows 10.

+0

Cảm ơn rất nhiều @Isma – pydev

+1

Bạn có thể chạy python-crontab trên các cửa sổ làm dịch vụ nếu bạn muốn. (thử nghiệm nhiều hơn sẽ là tuyệt vời) xem https://github.com/doctormo/python-crontab#running-the-scheduler –

Các vấn đề liên quan