如何将协调元素写入给定的控制台?

时间:2012-11-22 13:49:40

标签: python linux console terminal coords

给出下一个控制台:

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”等...(控制台很大)足以处理这个)。我怎么能实现这个?我真的不知道如何解决这个问题。

困扰我的另一个问题是如何调用这个exit-constructor,应该给出什么样的参数?

真诚地,一个真正缺乏经验的程序员。

1 个答案:

答案 0 :(得分:1)

回答你问题的第二部分......

您应该使用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!')

在这里查看“With-Statement”和“Context Managers”..

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

http://docs.python.org/2/reference/datamodel.html#context-managers