簡體   English   中英

在curses應用程序中使用子流程

[英]Using subprocess in a curses application

我正在創建一個使用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退出。)

有沒有辦法解決這個問題?

會將您的代碼修改為:

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

夠你了嗎? 還是您的真實腳本中存在一些其他行為,而不是您在此處粘貼的代碼中存在其他行為,從而使此解決方法不適合您的目標?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM