Как записать скоординированный элемент в данную консоль?
Учитывая следующую консоль:
import os
import tty
import termios
from sys import stdin
class Console(object):
def __enter__(self):
self.old_settings = termios.tcgetattr(stdin)
self.buffer = []
return self
def __exit__(self, type, value, traceback):
termios.tcsetattr(stdin, termios.TCSADRAIN, self.old_settings)
...
def dimensions(self):
dim = os.popen('stty size', 'r').read().split()
return int(dim[1]), int(dim[0])
def write(self, inp):
if isinstance(inp, basestring):
inp = inp.splitlines(False)
if len(inp) == 0:
self.buffer.append("")
else:
self.buffer.extend(inp)
def printBuffer(self):
self.clear()
print "\n".join(self.buffer)
self.buffer = []
Теперь я должен получить несколько букв в этом буфере, но буквы не указаны в правильном порядке, а некоторые места будут пустыми. Например: я хочу, чтобы в 12-м столбце и 14-м ряду на экране была буква "w", а в других местах - буква "w", а там - буква "b" и т. Д. (Консоль большая достаточно, чтобы справиться с этим). Как я мог реализовать это? Я действительно понятия не имею, как решить эту проблему.
Другой вопрос, который меня беспокоит, - как вызвать этот конструктор выхода, какие параметры нужно указать?
С уважением, действительно неопытный программист.
1 ответ
Чтобы ответить на 2 часть вашего вопроса...
Вы должны призвать class Console
с использованием with
заявление. Это будет автоматически звонить __enter__
а также __exit__
Подпрограммы. Например:
class CM(object):
def __init__(self, arg):
print 'Initializing arg .. with', arg
def __enter__(self):
print 'Entering CM'
def __exit__(self, type, value, traceback):
print 'Exiting CM'
if type is IndexError:
print 'Oh! .. an Index Error! .. must handle this'
print 'Lets see what the exception args are ...', value.args
return True
Запуск это:
with CM(10) as x:
print 'Within CM'
Выход:
Initializing arg .. with 10
Entering CM
Within CM
Exiting CM
Аргументы __exit__
связаны с исключениями. Если при выходе из оператора with нет исключений, то все аргументы (exception_type, exception_instance, exception_traceback) будут None
, Вот пример, показывающий, как аргументы выхода могут быть использованы...
Пример с исключением:
with CM(10) as x:
print 'Within CM'
raise IndexError(1, 2, 'dang!')
Выход:
Initializing arg .. with 10
Entering CM
Within CM
Exiting CM
Oh! .. an Index Error! .. must handle this
Lets see what the exception args are ... (1, 2, 'dang!')
Проверьте "С-Заявление" и "Менеджеры контекста" здесь..