精華區beta Python 關於我們 聯絡資訊
#!/usr/bin/python # 環境: Ubuntu Linux 6.06 # 說明: # 今天看教學網頁(講到dir,__import__)寫的練習作品, 會將cmd開頭的 # function當成command 將function註解當成command說明,自動生成help # message. # # 可以直接從這邊下載檔案, 我是程式苦手, 請鞭小力點 = = # http://kalug.linux.org.tw/~hychen/downloads/show_cmds_by_auto.py import re,sys def get_cmds(module): try: instance = __import__(module) except ImportError: print "import module error" sys.exit(0) cmds = {} for func_name in dir(instance): if re.match('^cmd_', func_name): cmds[func_name] = getattr(instance, func_name) return cmds # Commands # cmd_help() 會顯示這個程式有哪些 command 可用。 # "cmd_"開頭的function會被當成一個command, 註解則會當成command說明 def cmd_help(): """ show help message """ cmdlist = ["%s %s" % (func_name.split('_')[1], func.__doc__) for func_name,func in get_cmds(__name__).items()] # display, 這邊應該要顯示檔名而不是__name__ 用錯了 :P print "USAGE:"+__name__+"[Command] [Argvs]" print "\n".join(cmdlist) def cmd_dohi(): """ say hi """ print "hi" def cmd_yourcmd(): """ ccc """ pass if __name__ == '__main__': if len(sys.argv) == 1 : cmd_help() sys.exit(0) else: func_name = 'cmd_'+sys.argv[1] cmds = get_cmds(__name__) # 這樣寫應該也會動, 不過我不知道有沒有什麼效率問題 # func_name in cmds.keys() and cmds[func_name]() if func_name in cmds.keys(): cmds[func_name]() -- 到頭來,女人終究會變得像他媽媽一樣。 這是女人的悲哀,更是男人的悲哀… -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.10.158 ※ 編輯: xluna 來自: 220.135.10.158 (12/18 03:01) ※ 編輯: xluna 來自: 220.135.10.158 (12/18 03:03)