Проклятия Python, читающие один символ из stdin, влияют на вывод из оператора print - PullRequest
3 голосов
/ 14 сентября 2011

Я пытаюсь выполнить неблокирующее чтение одного символа из стандартного ввода. Я нашел решение с помощью библиотеки curses, но я делаю что-то не так при попытке записать вывод обратно в stdout.

import curses
from time import sleep

def callback(screen):
  screen.nodelay(1)
  return screen.getkey()

while 1:
  try:
    key = curses.wrapper(callback)
    print "Got keypress: ", key
  except:
    sleep(3)
    print "No Keypress"
    print "Program\nOutput"

# Prints
No Keypress
          Program
                  Output

Все работает безупречно, за исключением отступа. Есть ли способ это исправить?

Ответы [ 3 ]

5 голосов
/ 14 сентября 2011

Может показаться, что с помощью curses '\ n' - это просто подача формы.Предположительно, вам также необходимо вывести возврат каретки или явно использовать curses для перемещения курсора.

0 голосов
/ 14 января 2014
#!/usr/bin/python -tt
#youres to use
import curses
from time import sleep

def callback(screen):
  screen.nodelay(1)
  return screen.getkey()

def getkey():
  try:
    key = curses.wrapper(callback)
  except:
    key = None
  return key

#tryer
while 1:
  sleep(1)
  k= getkey()
  if k != None:
    print "goo", k
  else:
    print "foo"
0 голосов
/ 12 мая 2013

В случае, если собственно окно curses запущено, у меня работало только screen.addch('\n') (в этом случае печатается как возврат каретки, так и перевод строки); Я не мог заставить print (или, скорее, sys.stdout.write) "вести себя", даже с указанием \r\n.

...