Как записать скоординированный элемент в данную консоль?

Учитывая следующую консоль:

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!')

Проверьте "С-Заявление" и "Менеджеры контекста" здесь..

http://docs.python.org/2/reference/compound_stmts.html

http://docs.python.org/2/reference/datamodel.html

Другие вопросы по тегам