|
按ESC键弹出菜单
资料比较少,这年头基本没有人写curses。
#!/usr/bin/env python3
from os import system
import curses, subprocess
def get_param(prompt_string):
screen.clear()
screen.border(0)
screen.addstr(2, 2, prompt_string)
screen.refresh()
input = screen.getstr(10, 10, 60)
return input
def execute_cmd(cmd_string):
system("clear")
a = system(cmd_string)
print("")
if a == 0:
print ("Command executed correctly")
else:
print ("Command terminated with error")
raw_input("Press enter")
print ("")
blacklist=['']
screen = curses.initscr()
curses.noecho();
curses.cbreak()
screen.keypad(1)
history = []
line = 0
column = 0
char = []
key = 0
screen.clear()
height,width = screen.getmaxyx()
#print (height,width)
subwin = screen.subwin(0, width, 0, 0)
subwin.box()
cliwin = screen.subwin(0, width, height-3, 0)
cliwin.box()
def menu(screen):
height=0
width = 30
top=5
left=3
menuwin =screen.subwin(height , width,top ,left )
menuwin.keypad(1)
menuwin.border(0)
menubar = ["1 - Add a user", "2 - Restart Apache", "3 - Show disk space", "Test", "Neo", "Netkiller""4 - Exit"]
menuwin.addstr(1, 1, "Please enter a number...")
current = 0
while 1 :
menuitem = 0
#print (menuitem,current )
menuwin.refresh()
for m in menubar:
if current == menuitem:
menuwin.addstr(menuitem+2, 4,m , curses.A_REVERSE)
else:
menuwin.addstr(menuitem+2, 4, m)
menuitem=menuitem+1
key = menuwin.getch()
if key == curses.KEY_UP:
if current <= 0 :
current = 0
else:
current = current-1
#char = history[menuitem]
#cliwin.clear()
#cliwin.addstr(1,1,char)
#print("up",line)
#print(history[line])
if key == curses.KEY_DOWN:
if current >= len(menubar)-1 :
current = len(menubar)-1
else:
current = current + 1
#char = history[menuitem]
#cliwin.clear()
#cliwin.addstr(1,1,char)
#print("down",line)
#print(history[line])
if key == 10:
choice = current
print(choice)
#if key == 27:
#return
while key != ord('q'):
screen.refresh()
subwin = screen.subwin(0, width, 0, 0)
subwin.box()
cliwin = screen.subwin(0, width, height-3, 0)
cliwin.box()
key = screen.getch()
#print(key)
if 31<key<126:
c=chr(key)
char.append(c)
#screen.addstr(2,2,c)
cliwin.addstr(1,column+1,c)
column = column+1
#screen.refresh()
else:
pass # Ignore incorrect keys
if key in (curses.KEY_ENTER,10):
if len(char) > 1:
cmd = ''.join(char)
history.append(cmd)
#system(cmd)
subwin.clear()
subwin.addstr(1,1,subprocess.getoutput(cmd))
char = []
line += 1
column = 0
cliwin.refresh()
cliwin.clear()
#print ("ENTER!!!")
if key == curses.KEY_LEFT:
curses.beep()
print("left")
if key == curses.KEY_RIGHT:
curses.beep()
print("right")
if key == curses.KEY_UP:
if line <= 0 :
line = 0
else:
line = line-1
char = history[line]
cliwin.clear()
cliwin.addstr(1,1,char)
#print("up",line)
#print(history[line])
if key == curses.KEY_DOWN:
if line !=0 or line > len(history)-1 :
line = len(history)-1
else:
line = line+1
char = history[line]
cliwin.clear()
cliwin.addstr(1,1,char)
#print("down",line)
#print(history[line])
if key == curses.KEY_HOME:
#subwin = screen.subwin(0, width, 0, 0)
screen.addstr(1,1,'\n'.join(history))
if key == curses.KEY_END:
print(char)
if key == 27:
menu(screen)
#KEY_BACKSPACE
#KEY_NPAGE KEY_PPAGE
# if x == ord('1'):
# username = get_param("Enter the username")
# homedir = get_param("Enter the home directory, eg /home/nate")
# groups = get_param("Enter comma-separated groups, eg adm,dialout,cdrom")
# shell = get_param("Enter the shell, eg /bin/bash:")
# curses.endwin()
# execute_cmd("useradd -d " + homedir + " -g 1000 -G " + groups + " -m -s " + shell + " " + username)
# if x == ord('2'):
# curses.endwin()
# execute_cmd("apachectl restart")
# if x == ord('3'):
# curses.endwin()
# execute_cmd("df -h")
#
#exit()
#screen.refresh()
screen.keypad(0)
curses.echo() ; curses.nocbreak()
screen.clear()
curses.endwin()
|
|