Найти - Пользователи
Полная версия: linux работа с устройствами
Начало » Python для экспертов » linux работа с устройствами
1
pythonwin
Доброе утро!

подскажите, пожалуйста, как сделать так чтобы при чтении из устройства в linux питон не ждал ответа, а сразу возвращал значение, даже если с устройством ничего не происходит?

пример:
f = open('/dev/ttyMydev','r')
l = f.readlines() # здесь бывает задержка
f.close()

при этом бывает, что на l = f.readlines() программа ждет ответа от устройства, а бывает что просто возвращает текущее значение из устройва и сразу выполняет следующий оператор кода. Здесь нужен второй вариант
код один и тот же и запускается одинаково
slivlen
Тебе для этого придется работать с файлами на системном уровне(дескрипторы) без использования файловых объектов.
Используй модуль os и ф-цию os.open с режимом O_NONBLOCK.
http://www.python.org/doc/2.3/lib/os-fd-ops.html
pythonwin
slivlen спасибо сейчас посмотрю :)
pythonwin
на самом деле непонятно в чём причина - почему такая проблема возникает при работе с утройством как с объектом файл?
read, readline и readlines ждут конца файла, а его нет?
slivlen
Они ждут любые данные, это необязательно должен быть eof. Просто когда встречается eof они считают что достигнут конец файла. В устройствах не всегда есть доступная для считывания инфа, поэтому ф-ции чтения блокируются до поступления данных. Поумолчанию используется блокирующий ввод(файловый объект использует cишную fread) и чтобы это изменить надо передать специальный параметр для os.open или установить нeблокирующий режим для уже открытого дескриптора с помощью fcntl.
pythonwin
а как из файлового дискриптора создать объект файла?
slivlen
pythonwin
а как из файлового дискриптора создать объект файла?
Не знаю, наверно никак, но можно из файлового объекта получить дескриптор :)
Я вообще не советовал бы мешать в кучу файловые объекты и дескрипторы. Лучше выбрать что-нибудь одно.
pythonwin
slivlen спасибо за помощь :)
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