Ввод времени и сравнение его с пользовательским вводом - PullRequest
1 голос
/ 12 августа 2011

Я пытаюсь заставить функцию работать в скрипте Python в определенное время, указанное пользователем.Для этого я использую модуль datetime.

Пока это часть кода:

import os
import subprocess
import shutil
import datetime
import time

def process():

    path = os.getcwd()
    outdir = os.getcwd() + '\Output'

    if not os.path.exists(outdir):
        os.mkdir(outdir, 0777)

    for (root, dirs, files) in os.walk(path):
        filesArr = []
        dirname = os.path.basename(root)
        parent_dir = os.path.basename(path)

        if parent_dir == dirname:
            outfile = os.path.join(outdir,  ' ' + dirname + '.pdf')
        else:
            outfile = os.path.join(outdir, parent_dir + ' ' + dirname + '.pdf')

        print " "
        print 'Processing: ' + path

        for filename in files:
            if root == outdir:
                continue
            if filename.endswith('.pdf'):
                full_name = os.path.join(root, filename)
                if full_name != outfile:
                    filesArr.append('"' + full_name + '"')

        if filesArr:
            cmd = 'pdftk ' + ' '.join(filesArr) + ' cat output "' + outfile + '"'
            print " "
            print 'Merging: ' + str(filesArr)

            print " "

            sp = subprocess.Popen(cmd)

            print "Finished merging documents successfully."

            sp.wait()

    return

now = datetime.datetime.now()
hour = str(now.hour)
minute = str(now.minute)
seconds = str(now.second)
time_1 = hour + ":" + minute + ":" + seconds

print "Current time is: "  + time_1

while True:
     time_input = raw_input("Please enter the time in HH:MM:SS format: ")

     try:
        selected_time = time.strptime(time_input, "%H:%M:%S")
        print "Time selected: " + str(selected_time)

        while True:
            if (selected_time == time.localtime()):
             print "Beginning merging process..."
             process()
             break
             time.sleep(5)

        break

     except ValueError:
        print "The time you entered is incorrect. Try again."

Проблема заключается в попытке найти способ сравнить введенное пользователем время с текущим временем (например,текущее время запуска скрипта).Кроме того, как мне сохранить скрипт Python и обработать функцию в указанное время?

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Прежде всего, я бы посоветовал вам взглянуть на: http://docs.python.org/library/time.html#time.strptime, что может оказаться полезным в вашей ситуации при попытке проверить время.

Вы можете что-то вроде этого: время импорта

import time

while True: #Infinite loop        
    time_input = raw_input("Please enter the time in HH:MM:SS format: ")
    try:
        current_date = time.strftime("%Y %m %d")
        my_time = time.strptime("%s %s" % (current_date, time_input),
                             "%Y %m %d  %H:%M:%S")
        break #this will stop the loop
    except ValueError:
        print "The time you entered is incorrect. Try again."

Теперь вы можете делать вещи с помощью my_time, например, сравнивая их: my_time == time.localtime()

Самый простой способ сделатьпрограмма работает до тех пор, пока не истечет время:

import time

while True:
    if (my_time <= time.localtime()):
        print "Running process"
        process()
        break
    time.sleep(1) #Sleep for 1 second

Приведенный выше пример ни в коем случае не является лучшим решением, но, на мой взгляд, наиболее простым для реализации.

ТакжеЯ бы посоветовал вам использовать http://docs.python.org/library/subprocess.html#subprocess.check_call для выполнения команд, когда это возможно.

0 голосов
/ 12 августа 2011

В коде, который вы предлагаете, я вижу, что нужно прокомментировать различные вещи, но главное - на selected_time = selected_hour + ..., потому что я думаю, что вы добавляете целые числа с разными единицами.Возможно, вам следует начать с selected_time = selected_hour * 3600 + ....

Второй - когда вы пытаетесь проверить достоверность входных данных: вы делаете while на проверке, которая не может эволюционировать, поскольку пользователю не предлагается вводить другуюзначение.Это означает, что эти циклы никогда не закончатся.

Затем, что-то о надежности: возможно, вам следует сравнить выбранное время с текущим временем чем-то более гибким, то есть заменить == на >= или какой-то дельтой.

И, наконец, вы можете заставить скрипт Python ждать с помощью следующей команды:

import time
time.sleep(some_duration)

, где some_duration - это число с плавающей точкой, означающее в секундах.

Не могли бы выпожалуйста, проверьте, работает ли это сейчас?

...