В качестве дополнения к предыдущему сообщению, которое, к сожалению, похоже, умерло: select.select issue for sockets and pipes. Поскольку этот пост я пробовал разные вещи безрезультатно, и я хотел посмотреть, есть ли у кого-нибудь представление о том, где я ошибаюсь. Я использую модуль select(), чтобы идентифицировать, когда данные присутствуют ни в трубе, ни в сокете. Кажется, что сокет работает нормально, но труба оказывается проблематичной.select and Pipes trouble in Python
Я настроил трубу следующим образом:
pipe_name = 'testpipe'
if not os.path.exists(pipe_name):
os.mkfifo(pipe_name)
и считывающая труба:
pipein = open(pipe_name, 'r')
line = pipein.readline()[:-1]
pipein.close()
Он отлично работает как самостоятельный кусок кода, но когда я пытаюсь связать его функции select.select она не:
inputdata,outputdata,exceptions = select.select([tcpCliSock,xxxx],[],[])
Я попытался ввода 'pipe_name', 'testpipe' и 'pipein' в inputdata, но я всегда получаю «неопределенную» ошибку. Глядя на различных других постах я думал, что это может быть потому, что труба не имеет идентификатора объекта, так что я пробовал:
pipein = os.open(pipe_name, 'r')
fo = pipein.fileno()
и положить «Ф.О.» в аргументах select.select но получил TypeError: целое число является требуется. У меня также был Ошибка 9: Плохой дескриптор файла при использовании этой конфигурации 'fo'. Любые идеи, что я сделал неправильно, будут оценены.
EDITED КОД: мне удалось найти способ ее решения, хотя и не уверен, что это особенно аккуратным - я был бы заинтересован в любом comments- установки После доработки трубы:
pipe_name = 'testpipe'
pipein = os.open(pipe_name, os.O_RDONLY)
if not os.path.exists(pipe_name):
os.mkfifo(pipe_name)
Pipe Read:
def readPipe()
line = os.read(pipein, 1094)
if not line:
return
else:
print line
Основной цикл для мониторинга событий:
inputdata, outputdata,exceptions = select.select([tcpCliSock,pipein],[],[])
if tcpCliSock in inputdata:
readTCP() #function and declarations not shown
if pipein in inputdata:
readPipe()
Все работает хорошо, моя единственная проблема теперь заключается в том, что код считывается из сокета до того, как начнется мониторинг событий с выбранного элемента. Как только соединение выполняется с сервером TCP, команда отправляется через сокет, и мне, кажется, приходится ждать, пока труба не будет прочитана в первый раз до того, как эта команда пройдет.
Вы на коробке с окнами? Выбирайте только работы с сокетами там. –
В исходном вопросе вы написали: «В настоящее время в трубке хранятся входящие данные из формы html, сокет составляет соединение с сервером, который отправляет команды TCP/IP с различными интервалами. Форма и сервер находятся в одной и той же локальной сети, но на разных компьютерах «. Именованные каналы (fifos) являются локальными для одной машины и не доступны из другого. Вы показали, что фило читали, но не писатель-филонор. Что-то не хватает в вашем вопросе. – msw
Эй Спенсер, не Windows, удалось заставить его работать. – AimSkyward