- 按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()
时间: 2024-10-31 09:57:36