使用Python将日志文件内容打印到curses屏幕上

4
为什么这不起作用? -- 全部代码在此处... http://pastebin.com/f940nPPg
....snip
f = open(log, 'r')
y = 3;
x = 3;

while True:
    c = quote_window.getch() 
    if c == ord('r') or c == ord('R'):
        quote_text_window.clear()
        quote_text_window.refresh()
        for line in f:
            quote_text_window.addstr(line)
            y = y + 1
            quote_text_window.move(y, x)

    elif c == ord('q') or c == ('Q'):
        break

    stdscr.noutrefresh()
    quote_window.noutrefresh()
    quote_text_window.noutrefresh()
    curses.doupdate()
f.close()
....snip

我遇到了错误

    quote_text_window.addstr(line)
    _curses.error: addwstr() returned ERR

如果我向addstr()传递字符串字面值,我会得到下面的结果

    quote_text_window.move(y, x)
    _curses.error: wmove() returned ERR

我正在尝试开发一个用于阅读日志文件的curses接口。我希望能够利用SSH或其他工具,以便在一个接口中读取来自不同计算机的各种日志文件。我知道肯定有很多非常好的程序可以完成这种工作,但我认为这是学习的好方法。因为我是新手,对编程、Python和Curses都不是很熟悉(正如你可能已经注意到的一样)。

2个回答

0

就像 Cold Diamondz 所说的那样,文本文件不能比窗口更大,但是如果您使用一个 pad,您可以调用一个大文件并告诉 pad 刷新的尺寸。请查看 pads。 http://docs.python.org/3.3/howto/curses.html


0
你能提供完整的代码并包含注释来解释你认为可能导致问题的部分吗?另外,你的日志文件有多少行?因为如果行数太多,它就无法运行,就像我的终端是80列和24行一样,所以如果我有一个21行的日志文件,程序就无法工作。

我添加了一个到Pastesbin的链接。我正在使用的日志文件只有kern.log的一部分,仅有59行。有没有更好的方法来处理大量文本输出?谢谢回复! - user1855481
你是对的。较小的文件可以打印出来。对于较大的文件,我该怎么办?也许可以添加一个键盘事件,每次只显示一屏。 - user1855481
没问题,一个想法是,如果日志文件比屏幕长,你可以提示用户按键来切换到下/上一节。 - Cold Diamondz
我已经添加了键绑定,如C-n和C-p来滚动面板。 - user1855481

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接