У меня есть код, который откроет файл .text в режиме добавления, сгенерирует случайную строку и добавит эту строку в файл за промежуток времени.
Программа: Random_Generation
import os
import sys
import string
import random
import time
class RandomCreation():
def __init__(self, path):
self.path = path
def string_generator(self, size):
chars = string.ascii_uppercase + string.ascii_lowercase
return ''.join(random.choice(chars) for _ in range(size))
if __name__ == '__main__':
path = os.path.realpath(sys.argv[1])
try:
while True:
random_cration = RandomCreation(path)
data = random_cration.string_generator(10)
f = open(f'{path}/try_file.txt', 'a+')
f.write(data +"\n")
print('Successfully Appended')
time.sleep(2)
except KeyboardInterrupt:
f.close()
print('Exiting......')
exit()
Эта программа работает отлично.
Я хочу написать другую программу (называемую File_Handling), которая откроет тот же файл .text и прочитает файл построчно. Эта программа зависит от вышеупомянутой программы с именем Random_Generation. Эта программа File_Handling будет ждать, пока не будет сгенерирован текстовый файл. После генерации текстового файла он будет построчно читать файл и печатать его содержимое, пока он все еще записывается программой Random_Generation. Если нет новой строки для чтения, она будет ждать новой строки, но сама не останавливается. Поэтому, когда появятся новые строки, я хотел бы напечатать только новые строки.
Программа: File_Handling
import sys
import os
import os.path
import time
path = os.path.realpath(sys.argv[1])
filename = f'{path}/try_file.txt'
while not os.path.exists(filename):
time.sleep(1)
if os.path.exists(filename):
file = open(filename, "r")
for num, line in enumerate(file, 1):
print(f'{num}: {line}')
file.close()
Оба кода работают параллельно. Условие программы File_Handling:
- Если текстовый файл пуст, тогда он будет ожидать появления новой строки
- Если в текстовом файле есть какие-то строки, он будет читать эти строки построчно до конца файла.
- Достигнув конца файла, он будет ожидать появления новой строки.
- Он никогда не возвращается к тем строкам, которые были прочитаны ранее.
- Программа записи и чтения не синхронизирована.
- Может быть записано в любой момент времени.
- Единственный факт, что после чтения записи произойдет до конца файла.
Для достижения цель, он обязательно хочет семафор и, возможно, асин c. Но я должен включить их?
Я не могу сделать так, как требуется в программе File_Handling, пожалуйста, помогите !!!