3

我在python中使用curses模块通过读取文件来实时显示输出。字符串消息使用 addstr() 函数输出到控制台,但我无法在需要的地方打印到换行符。

示例代码:

import json
import curses
w=curses.initscr()

try:
    while True:
        with open('/tmp/install-report.json') as json_data:
            beta = json.load(json_data)
            w.erase()
            w.addstr("\nStatus Report for Install process\n=========\n\n")
            for a1, b1 in beta.iteritems():
                w.addstr("{0} : {1}\n".format(a1, b1))
            w.refresh()
finally:
    curses.endwin()

上面并不是每次迭代都将字符串输出到新行(注意 addstr() 中的 \n)。相反,如果我调整终端窗口的大小,脚本会因错误而失败。

w.addstr("{0} ==> {1}\n".format(a1, b1))
_curses.error: addstr() returned ERR
4

1 回答 1

3

除了一般建议之外,没有足够的程序提供更多的建议:

  • 如果您的脚本没有启用滚动功能,您将在打印到屏幕末尾时收到错误消息(请参阅 参考资料window.scroll)。
  • 如果您调整终端窗口的大小,您将不得不阅读键盘来处理任何KEY_RESIZE(并忽略错误)。

关于扩展的问题,这些功能将像这样使用:

import json
import curses
w=curses.initscr()
w.scrollok(1) # enable scrolling
w.timeout(1)  # make 1-millisecond timeouts on `getch`

try:
    while True:
        with open('/tmp/install-report.json') as json_data:
            beta = json.load(json_data)
            w.erase()
            w.addstr("\nStatus Report for Install process\n=========\n\n")
            for a1, b1 in beta.iteritems():
                w.addstr("{0} : {1}\n".format(a1, b1))
            ignore = w.getch()  # wait at most 1msec, then ignore it
finally:
    curses.endwin()
于 2016-08-25T20:43:45.463 回答