Отключить буферизацию sys.stdin в Python 3Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Отключить буферизацию sys.stdin в Python 3

Сообщение Anonymous »

Я пытаюсь отключить буферизацию стандартного ввода, чтобы прочитать ответ кода ANSI \033[6n (который должен сообщать о положении курсора).

Я попробовал stdin_ub = os.fdopen(stdin.fileno(), 'rb', buffering=0), как предложено в ответе. Установка меньшего размера буфера для sys.stdin?, но программа все равно блокируется на строка ch = stdin_ub.read(1) первой попытки чтения. Он разблокируется, когда в терминал вводится return, что означает, что стандартный ввод все еще находится в строковом буфере.

Для справки, вот полный код:

Код: Выделить всё

def getpos():
stdin_ub = os.fdopen(sys.stdin.fileno(), 'rb', buffering=0)
sys.stdout.write('\033[6n')
sys.stdout.flush()
ch, k, field = None, -1, [b'', b'']
while True:
#print('reading wait...')
ch = stdin_ub.read(1)
#print('reading OK')
if ch == b'[': k = 0
elif ch == b';': k = 1
elif ch == b'R': break
elif k >= 0: field[k] += ch
try:
return tuple(map(int, field))
except:
pass
Я использую Python 3.5.1

Подробнее здесь: https://stackoverflow.com/questions/377 ... n-python-3
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»