LINUX.ORG.RU

[Python] Построчный режим буферизации

 


0

0

Пишу на Python клиент-серверное приложение, где сервер использует суперсервер xinetd, цепляясь за сокеты своими stdin и stdout. И вроде бы всё ничего, но один момент мне абсолютно не понравился. Программа сначала читает все данные, проходит какой-то промежуток времени и только потом она отдаёт их в сокет. Думаю, во всём виноват режим буферизации. Для C построчный режим устанавливался бы как setvbuf (stream, 0, _IOLBF, 0);, а в Python абсолютно ума не приложу, как сделать что-то подобное. Может у кого-то есть идеи?

---
С Уважением,


Всё, нашёл в чём была проблема. Просто сделал так:

#!/usr/local/bin/python -u

# Skipped

while True:
	# Stdin
	cmd = sys.stdin.readline()
	# Get command and parameters list
	cmdlist = cmd.rstrip('\n\r\t').split(' ')

	# Skipped

---
С Уважением,

BuG2BuG
() автор топика
Ответ на: комментарий от BuG2BuG

можно еще так для красоты:

for line in sys.stdin:
    print line

работает примерно так:

def __iter__(self):
    line = self.readline()
    while line:
         ## можно здесь и пострипать строку
         ##line = line.strip('\r\n')

         yield line
         line = self.readline()

no1sm ★★
()

У потоков есть метод flush

>>> dir (sys.stdin)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'encoding', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

Deleted
()

*млин... врапинг на преформате нихт ферштейн, что надо перетаскивать.

У потоков есть метод flush

>>> dir (sys.stdin)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', 
'__getattribute__', '__hash__', '__init__', '__iter__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 
'close', 'closed', 'encoding', 'fileno', 'flush', 'isatty', 'mode', 
'name', 'newlines', 'next', 'read', 'readinto', 'readline', 
'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 
'writelines', 'xreadlines']

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.