Форум сайта python.su
Доброе утро!
подскажите, пожалуйста, как сделать так чтобы при чтении из устройства в linux питон не ждал ответа, а сразу возвращал значение, даже если с устройством ничего не происходит?
пример:
f = open('/dev/ttyMydev','r') l = f.readlines() # здесь бывает задержка f.close()
Отредактировано (Фев. 23, 2007 07:51:17)
Офлайн
Тебе для этого придется работать с файлами на системном уровне(дескрипторы) без использования файловых объектов.
Используй модуль os и ф-цию os.open с режимом O_NONBLOCK.
http://www.python.org/doc/2.3/lib/os-fd-ops.html
Офлайн
slivlen спасибо сейчас посмотрю :)
Офлайн
на самом деле непонятно в чём причина - почему такая проблема возникает при работе с утройством как с объектом файл?
read, readline и readlines ждут конца файла, а его нет?
Офлайн
Они ждут любые данные, это необязательно должен быть eof. Просто когда встречается eof они считают что достигнут конец файла. В устройствах не всегда есть доступная для считывания инфа, поэтому ф-ции чтения блокируются до поступления данных. Поумолчанию используется блокирующий ввод(файловый объект использует cишную fread) и чтобы это изменить надо передать специальный параметр для os.open или установить нeблокирующий режим для уже открытого дескриптора с помощью fcntl.
Офлайн
а как из файлового дискриптора создать объект файла?
Офлайн
pythonwinНе знаю, наверно никак, но можно из файлового объекта получить дескриптор :)
а как из файлового дискриптора создать объект файла?
Офлайн
slivlen спасибо за помощь :)
Офлайн