Python имплантация цикла while, который проверяет, содержит ли файл новые данные - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь написать цикл while true, который проверяет последнюю строку текстового файла - TransactionFile.txt периодически (каждые 10 секунд), который содержит данные о транзакциях, добавляемых в файл.

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

У меня возникли проблемы с тем, чтоопределение, изменилась или нет текущая транзакция в TransactionFile.txt.

Это моя функция для этого

def transactionCheck():
    threading.Timer(10.0, transactionCheck).start()
    fileSecLast = None
    while True:
        try:
            file = open('TransactionFile.txt', 'r')
        except FileNotFoundError:
            print('TransactionFile.txt could not found.')
            break
        else:
            file = open('TransactionFile.txt', 'r')
            global fileLast
            fileLast = file.readlines()[-1]
            file.close
            if fileLast == fileLast:
                print('New transaction data found.')
                print(fileLast)
                callfunctionNonce = calcNonce()
            elif fileLast == fileSecLast:
                print('No new transaction data found.')
                break          
            break
        break

, которая дает вывод этого:

TransactionFile.txt could not found.
TransactionFile.txt could not found.
TransactionFile.txt could not found.
New transaction data found.
MOWZ575728::max::sam::67890::2018-05-19 13:11:50.250116

New transaction data found.
MOWZ575728::max::sam::67890::2018-05-19 13:11:50.250116

New transaction data found.
MOWZ575728::max::sam::67890::2018-05-19 13:11:50.250116

New transaction data found.
DOYU363556::geoff::tim::14515::2018-05-19 09:12:06.250116

Чего я хотел бы добиться, так это, если бы никакие новые транзакции не были записаны в TransactionFile.txt вывод No new transaction data found. вместо распечатывания той же самой транзакции снова.Как мне поступить так?

Мой предполагаемый вывод должен выглядеть примерно так:

TransactionFile.txt could not found.
TransactionFile.txt could not found.

New transaction data found.
MOWZ575728::max::sam::67890::2018-05-19 09:11:50.250116

No new transaction data found.
No new transaction data found.

New transaction data found.
DOYU363556::geoff::tim::14515::2018-05-19 09:12:06.250116

Спасибо за отзывы и помощь.

Если мой вопроснепонятно, я постараюсь объяснить это по-другому.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вы никогда не дадите значение для fileSecLast и условие if будет неверным.Попробуйте это:

def transactionCheck():
threading.Timer(10.0, transactionCheck).start()
fileSecLast = None
while True:
    try:
        file = open('TransactionFile.txt', 'r')
    except FileNotFoundError:
        print('TransactionFile.txt could not found.')
        break
    else:
        file = open('TransactionFile.txt', 'r')
        global fileLast
        fileLast = file.readlines()[-1]
        file.close
        if fileLast == fileSecLast:
            print('No new transaction data found.')
            break 
        else:
            print('New transaction data found.')
            print(fileLast)
            callfunctionNonce = calcNonce()
            fileSecLast = fileLast
        break
    break
0 голосов
/ 19 мая 2018

Вы делаете это сложно.Если вам удастся убедиться, что файл завершается с самого начала, это должно быть сделано:

def transactionCheck():
    file = open("TransactionFile.txt", 'r')
    while True:
        line = file.readline().strip()
        if line:
            print("New transaction:")
            print(line)
            print()
        else:
            print("No new transaction")
        time.sleep(10)
...