[英]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.