Найти - Пользователи
Полная версия: Проблема с проверкой текстового документа
Начало » Центр помощи » Проблема с проверкой текстового документа
1
MrDwayne
У меня есть checkbutton и когда он включен должна происходить проверка текстового документа. Т.е. если в документе имеется “get”, то будет происходить какое-то действие и после этого действия документ очиститься.“get” в текстовый документ может записываться в любой момент, поэтому мне надо чтобы проверка проводилась все время, а не только один раз, я попробовал использовать бесконечный цикл, но из-за этого скрипт крашиться. Много чего перепробовал, но не могу сделать работоспособную проверку, поэтому прошу помощи. Как мне сделать чтобы проверка происходила все время?
P.S. checkbutton не обязателен, можно и простую проверку в фоне.
Код:
 def check():
    if check_var.get() == True:
        while True:
            with open('get.txt', 'r') as file:
                data = file.read()
            if data == 'get':
                print('Something')
                with open('get.txt', 'w') as file:
                    file.write('')
wi34rd
В таких скриптах нужно использовать функцию sleep модуля time.
scidam
Судя по текстовому описанию задачи, должно быть как-то так:
 exitflag = False # a small hole, that will be used below
while True:
    with open('get.txt', 'r') as myfile:
        while True:
            myfile.seek(0)
            data = myfile.read()
            if 'get' in data:
                # Do some stuff here... 
                print 'I have found get... etc'
                print 'The file will be cleared now!'
                break
            
            # If data includes `exitnow` all nested loops are terminated 
            # (just a hole to quit all loops)
            if 'exitnow' in data:
                exitflag = True
                break
    try:
        with open('get.txt', 'w') as myfile:
            myfile.write('')
    except IOError:
        # Do exception stuff here
        print "Couldn't open the file for writing/clearing..."
    
    if exitflag:
        print "I've got exit-flag. Exiting immediately!"
        break

Для Py3 нужно адаптировать printы
MrDwayne
scidam
Судя по текстовому описанию задачи, должно быть как-то так:
По-сути, этот код работает, но у меня еще есть другая часть кода и графическое оформление. Проблема в том, что при работе этого цикла другая часть кода не работает, а мне надо чтобы работал весь код, а проверка происходила в фоне.
scidam
…. а мне надо чтобы работал весь код, а проверка происходила в фоне.

Нужно использовать потоки, чтобы сделать то, что Вы хотите.
Самый простой вариант, следующий:

 import threading, time
def file_checking():
    exitflag = False # a small hole, that will be used below
    while True:
        with open('get.txt', 'r') as myfile:
            while True:
                time.sleep(1) # This is optional, i.e. the file checkd every 1 s.
                myfile.seek(0)
                data = myfile.read()
                if 'get' in data:
                    # Do some stuff here... 
                    print 'I have found get... etc'
                    print 'The file will be cleared now!'
                    break
                
                # If data includes `exitnow` all nested loops are terminated 
                # (just a hole to quit all loops)
                if 'exitnow' in data:
                    exitflag = True
                    break
        try:
            with open('get.txt', 'w') as myfile:
                myfile.write('')
        except IOError:
            # Do exception stuff here
            print "Couldn't open the file for writing/clearing..."
        
        if exitflag:
            print "I've got exit-flag. Exiting immediately!"
            break
checker = threading.Thread(target=file_checking)
checker.daemon = True
checker.start()
# This emulates main gui loop
ind = 0
for x in range(500):
    time.sleep(1)
    ind += 1
    print "I am executing... but the file is still checked, time={}".format(ind)
doza_and
MrDwayne
есть другая часть кода и графическое оформление
scidam
Нужно использовать потоки
Я бы не сказал что нужно. Наверное даже вредно. GUI приложение постоянно крутит цикл обработки событий. Когда вы виснете в постоянной проверке файла то оно не может проверить что там пользователь нажимал. В любом GUI можно поставить в очередь обрабатываемых событий события проверки содержимого файла. Например проверять его по событиям GUI таймера. При использовании тредов вам надо заботиться о синхронизации этих процессов, об останове тредов и много еще о чем. А при использовании средств GUI это не нужно.

Но как это сделать не напишу потому что это зависит от того какое у вас GUI А вы этого не написали.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB