Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2007 07:49:56

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

Доброе утро!

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

пример:

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

при этом бывает, что на l = f.readlines() программа ждет ответа от устройства, а бывает что просто возвращает текущее значение из устройва и сразу выполняет следующий оператор кода. Здесь нужен второй вариант
код один и тот же и запускается одинаково



Отредактировано (Фев. 23, 2007 07:51:17)

Офлайн

#2 Фев. 23, 2007 11:13:44

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

Тебе для этого придется работать с файлами на системном уровне(дескрипторы) без использования файловых объектов.
Используй модуль os и ф-цию os.open с режимом O_NONBLOCK.
http://www.python.org/doc/2.3/lib/os-fd-ops.html



Офлайн

#3 Фев. 23, 2007 11:34:50

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

slivlen спасибо сейчас посмотрю :)



Офлайн

#4 Фев. 23, 2007 12:26:16

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

на самом деле непонятно в чём причина - почему такая проблема возникает при работе с утройством как с объектом файл?
read, readline и readlines ждут конца файла, а его нет?



Офлайн

#5 Фев. 23, 2007 12:55:29

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

Они ждут любые данные, это необязательно должен быть eof. Просто когда встречается eof они считают что достигнут конец файла. В устройствах не всегда есть доступная для считывания инфа, поэтому ф-ции чтения блокируются до поступления данных. Поумолчанию используется блокирующий ввод(файловый объект использует cишную fread) и чтобы это изменить надо передать специальный параметр для os.open или установить нeблокирующий режим для уже открытого дескриптора с помощью fcntl.



Офлайн

#6 Фев. 23, 2007 14:39:59

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

а как из файлового дискриптора создать объект файла?



Офлайн

#7 Фев. 23, 2007 18:08:42

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

pythonwin
а как из файлового дискриптора создать объект файла?
Не знаю, наверно никак, но можно из файлового объекта получить дескриптор :)
Я вообще не советовал бы мешать в кучу файловые объекты и дескрипторы. Лучше выбрать что-нибудь одно.



Офлайн

#8 Фев. 24, 2007 15:10:42

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

linux работа с устройствами

slivlen спасибо за помощь :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version