我正在创建一个使用curses
构建简单用户界面的应用程序。它还使用subprocess
模块运行外部文本编辑器,以便用户可以键入一些文本,然后关闭编辑器并返回主程序。
问题是,当编辑器是基于控制台的,如Vim或Nano时,curses不会正确地解除初始化。这意味着如果使用了颜色模式(curses.start_color()
),终端在程序完成后会保持颜色。
这是一个有这个问题的测试脚本(至少对我来说,我使用Ubuntu和gnome-terminal):
import curses
import subprocess
screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(1)
try:
curses.curs_set(0)
except curses.error:
pass
curses.start_color()
screen.addstr(0, 0, 'hello, world!')
screen.refresh()
while 1:
c = screen.getch()
if c == ord('q'):
break
if c == ord('r'):
subprocess.call('vim', shell=False)
screen.clear()
screen.addstr(0, 0, 'hello, world!')
screen.refresh()
curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.curs_set(1)
curses.endwin()
(按r
进入Vim,然后按q
退出。)
有没有办法解决这个问题?
答案 0 :(得分:0)
将您的代码修改为:
if c == ord('q'):
subprocess.call('reset', shell=False)
break
对你来说够了吗?或者您的真实脚本中是否存在一些不在您粘贴的代码中的其他行为,这使得此变通方法不适合您的目标?