ACa*_*ter 7 python curses ncurses
我正在构建一个python curses应用程序.
我有两种打印到curses窗口的方法:print x和windows.addstr(x)(以及其他类似的window.*选项).
但是,出于调试目的,我希望能够打印到标准控制台,所以当我退出curses窗口时,我有等待我的信息.我通常会使用print x,但打印到curses窗口.
sys.stout.write() 也失败了.
我怎样才能做到这一点?
使用完sys.stdout之后os.fdopen,这是追溯
curses.nocbreak()
_curses.error: nocbreak() returned ERR
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
Run Code Online (Sandbox Code Playgroud)
要像你说的那样做,这里是我使用的一个片段:
class StdOutWrapper:
text = ""
def write(self,txt):
self.text += txt
self.text = '\n'.join(self.text.split('\n')[-30:])
def get_text(self,beg,end):
return '\n'.join(self.text.split('\n')[beg:end])
if __name__ == "__main__":
mystdout = StdOutWrapper()
sys.stdout = mystdout
sys.stderr = mystdout
screen = curses.initscr()
curses.noecho()
curses.cbreak()
# do your stuff here
# you can also output mystdout.get_text() in a ncurses widget in runtime
screen.keypad(0)
curses.nocbreak()
curses.echo()
curses.endwin()
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
sys.stdout.write(mystdout.get_text())
Run Code Online (Sandbox Code Playgroud)
这个技巧的巧妙之处在于,您还可以在小部件的ncurse运行时期间输出stdout.当然,StdOutWrapper的内部表示可以根据需要进行调整,以更好地满足您的需求.
| 归档时间: |
|
| 查看次数: |
7675 次 |
| 最近记录: |