2016-05-05 184 views
3

所以我編寫了一個Python 3庫,它用作應用程序的「後端」。現在我可以和解釋者一起坐下來,導入源文件,並使用lib進行破解 - 我知道如何做到這一點。創建Python命令行應用程序

但我也想建立一個命令行'frontent'應用程序使用庫。我的庫定義了一些具有高級命令的對象,這些對象應該可以被應用程序看到。這樣的命令可能會返回一些數據結構,而高級命令會很好地打印它們。換句話說,命令行應用程序將是一個很小的包裝器,將輸入傳遞給庫命令,並將結果呈現給用戶。

我想要實現的最好的例子可能是Mercurial SCM,因爲它是用Python編寫的,'hg'命令執行我正在查找的內容 - 例如'hg commit -m message '會找到負責'commit'命令實現的代碼,傳遞來自用戶的參數並完成其工作。在回來的路上,它可能會得到一些結果並很好地打印出來。

在Python中是否有一種通用的方法?像使用註釋將類/方法/函數暴露爲「高級」命令一樣?有人知道任何教程嗎?

+2

使用['argparse'](https://docs.python.org/3/library/argparse.html)解析命令行參數。從那裏,調用庫中的方法並打印結果。 – dsh

+2

你看看點擊http://click.pocoo.org/5/? – Adib

+0

這不是更多的bash問題嗎?你可以在你的bash配置文件中使用你想要的命令來調用類似'python script.py args'的東西。然後在腳本中使用'argparse'等解析出這些參數。 – Bahrom

回答

1

你可以用argparse來做到這一點。例如,這裏是我的deploy腳本的開始。

def main(argv): 
    """ 
    Entry point for the deploy script. 

    Arguments: 
     argv: All command line arguments save the name of the script. 
    """ 
    parser = argparse.ArgumentParser(description=__doc__) 
    parser.add_argument('-v', '--verbose', action='store_true', 
         help='also report if files are the same') 
    parser.add_argument('-V', '--version', action='version', 
         version=__version__) 
    parser.add_argument('command', choices=['check', 'diff', 'install']) 
    fname = '.'.join(['filelist', pwd.getpwuid(os.getuid())[0]]) 
    args = parser.parse_args(argv) 

它使用一個參數來選擇一個函數。你可以定義一個字典映射選擇功能;

cmds = {'check': do_check, 'diff': do_diff, 'install': do_install} 
fn = cmds[args.command] 

如果你確保所有的字典鍵是在命令中選擇,你並不需要趕上KeyError

+0

我正在尋找argparse。很容易,支持子命令(想'git commit')並且已經安裝。謝謝。 – wujek