Проверьте наличие файла в течение определенного времени, а затем прервите - PullRequest
0 голосов
/ 02 февраля 2019

Я пытался разорвать цикл, который предназначен для поиска файла в определенном месте.Мое намерение состоит в том, чтобы заставить мой сценарий искать этот файл в течение определенного времени, а затем разбить его, независимо от того, найден файл или нет, но я не могу получить никакого представления.

Как я могу сделатьсценарий ждет определенное время, а затем прерывается, когда время истекло?

Это мой сценарий на данный момент:

import os
import time

file_path = r"C:\Users\WCS\Desktop\item.txt"

time_limit = 5
while not os.path.exists(file_path):
    time.sleep(1)
    #is there any logic I can apply here to make the following line valid
    # if waiting_time>=time_limit:break

print("Time's up")

Ответы [ 6 ]

0 голосов
/ 02 февраля 2019

Чтобы проверить наличие файла в определенном месте, вы можете попробовать следующее.Сценарий будет разорван, как только файл будет найден, в противном случае он будет ждать до 5 секунд, пока файл не будет доступен, прежде чем разорвать.

import os
import time

file_path = r"C:\Users\WCS\Desktop\item.txt"

time_to_wait = 5
time_counter = 0
while not os.path.exists(file_path):
    time.sleep(1)
    time_counter += 1
    if time_counter > time_to_wait:break

print("done")
0 голосов
/ 02 февраля 2019

Вот как это сделать с классом threading.Timer().Они могут быть настроены так, чтобы задерживать указанное количество времени и вызов как функцию по вашему выбору.

import os
from threading import Timer
import time


file_path = r"C:\Users\WCS\Desktop\item.txt"

# Timer callback function.
def timeout():
    global time_ran_out
    time_ran_out = True

time_limit = 5
time_ran_out = False  # Define variable the callback function modifies.
timer = Timer(time_limit, timeout)  # Create a timer thread object.
timer.start()  # Start the background timer.

while not os.path.exists(file_path):
    time.sleep(1)
    if time_ran_out:
        print('Times up!')
        break

print("Done")
0 голосов
/ 02 февраля 2019

Как прокомментировал Роганджош, было бы проще, если бы вы использовали метки времени.Я добавил соответствующий код ниже:

import os
import time
from datetime import datetime, timedelta

file_path = r"C:\Users\WCS\Desktop\item.txt"
time_limit = datetime.now() + timedelta(seconds=5)
present = datetime.now()   

while (not os.path.exists(path)) and present < time_limit:
    present = datetime.now()
    if present >= time_limit:
        print("Time's up")
        break
    time.sleep(1)
0 голосов
/ 02 февраля 2019
import os
import time

file_path = r"C:\Users\WCS\Desktop\item.txt"
cTime=0
time_limit = 5

while cTime<time_limit:

    if os.path.exists(file_path)==False:
        cTime=cTime+1
        time.sleep(1)

    else:
        pass

if cTime==5:
    responce="Time's Up"
else:        
    responce='Found'

print(responce)
0 голосов
/ 02 февраля 2019

Рассчитайте истекшее время, выполнив actual time минус start time с помощью функции time.time() и назначьте переменную (file_exists в этом коде), которая будет изменена, и проверьте, существует ли файлили нет и используйте его для цикла.

Как показано ниже:

import os
import time

file_path = r"C:\Users\WCS\Desktop\item.txt"

time_limit = 5

start = time.time()
file_exists = os.path.exists(file_path)

while not file_exists:
    time.sleep(1)
    file_exists = os.path.exists(file_path)
    elapsed = time.time() - start
    if elapsed >= time_limit:
        break
else:
    print("File exist.")

print(elapsed)
print("Time's up")
0 голосов
/ 02 февраля 2019
def exists_timeout(path, timeout):
    """Return once <path> exists, or after <timeout> seconds,
    whichever is sooner
    """
    timer = timeout
    while (not os.path.exists(path)) and timer > 0:
        time.sleep(1)
        timer -= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...