在curses应用中使用子进程
我正在创建一个应用程序,使用 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
退出。)
有没有办法解决这个问题?
1 个回答
0
你觉得把你的代码改成这样:
if c == ord('q'):
subprocess.call('reset', shell=False)
break
这样就够了吗?还是说在你实际的脚本中,还有一些其他的行为是你在这里贴的代码里没有的,这让这个解决办法不适合你的目标呢?