Я пытаюсь написать однопоточную неблокирующую программу с системным вызовом select
. Однако с обработчиками файлов это не работает.Использовать выбор системного вызова с файлами
Вот код:
import sys
import select
while True:
file_handler = open('filename.txt')
inputs = [file_handler, sys.stdin]
try:
_input, _output, _error = select.select(inputs, [], [])
except select.error, e:
print e
for i in _input:
txt = i.readline()
if len(txt) > 0:
print 'txt:', txt
Достигает сообщение для печати, когда есть новый вход со стандартного ввода, но не тогда, когда новая строка записывается в файл. Он отлично работает при использовании sockets
вместо файлов.
Файлы не работают. Файл не отслеживается для изменений. Вы не будете знать, что указатель файла продвинулся до тех пор, пока вы снова не прочитаете файл. Возможно, вам повезло с 'inotify' (предполагается, что это linux). Я не использовал 'pyinotify' в годах, но это было довольно ужасно, и было лучше взломать собственное решение из его кишок. – tdelaney