在curses应用程序中使用subprocess

时间:2011-11-30 22:33:32

标签: python subprocess 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 :(得分:0)

将您的代码修改为:

if c == ord('q'):
    subprocess.call('reset', shell=False)
    break

对你来说够了吗?或者您的真实脚本中是否存在一些不在您粘贴的代码中的其他行为,这使得此变通方法不适合您的目标?