引言
您是否能編寫命令行工具?也許您可以,但您能編寫出真正好用的命令行工具嗎?本文討論使用 Python 來創(chuàng)建一個強健的命令行工具,并帶有內置的幫助菜單、錯誤處理和選項處理。由于一些奇怪的原因,很多人并不了解 Python? 的標準庫具有制作功能極其強大的 *NIX 命令行工具所需的全部工具。
可以這樣說,Python 是制作 *NIX 命令行工具的最佳語言,因為它依照“batteries-included”的哲學方式工作,并且強調提供可讀性高的代碼。但僅作為提醒,當您發(fā)現(xiàn)使用 Python 創(chuàng)建命令行工具是一件多么簡單的事情時,這些想法很危險,您的生活可能被攪得一團糟。據(jù)我所知,至今還沒有發(fā)表過詳細說明使用 Python 創(chuàng)建命令行工具的文章,因此我希望您喜歡這篇文章。
設置
Python 標準庫中的 optparse 模塊可完成創(chuàng)建命令行工具的大部分瑣碎工作。optparse 包含在 Python 2.3 中,因此該模塊將包括在許多 *NIX 操作系統(tǒng)中。如果由于某種原因,您使用的操作系統(tǒng)不包含所需要的模塊,那么值得慶幸的是,Python 的最新版本已經(jīng)過測試并編譯到幾乎任何 *NIX 操作系統(tǒng)中。Python 支持的系統(tǒng)包括 IBM? AIX?、HP-UX、Solaris、Free BSD、Red Hat Linux?、Ubuntu、OS X、IRIX,甚至包括幾種 Nokia 手機。
創(chuàng)建 Hello World 命令行工具
編寫優(yōu)秀的命令行工具的第一步是定義要解決的問題。這對您工具的成功至關重要。這對于以盡可能簡單的方法解決問題也同樣重要。這里明確地采用了 KISS(Keep It Simple Stupid,保持簡單)準則。只有在實現(xiàn)并測試了計劃內功能之后才添加選項和增加其他功能。
我們首先從創(chuàng)建 Hello World 命令行工具開始。按照上面的建議,我們使用盡可能簡單的術語來定義問題。
問題定義:我希望創(chuàng)建一個命令行工具,默認打印 Hello World,并提供用于打印不通人的姓名的選項。
基于上述說明,可以提供一個包含少量代碼的解決方案。
Hello World 命令行接口 (CLI)
#!/usr/bin/env python import optparse def main(): p = optparse.OptionParser() p.add_option('--person', '-p', default="world") options, arguments = p.parse_args() print 'Hello %s' % options.person if __name__ == '__main__': main()
如果運行此代碼,預期的輸出如下:
Hello world
但是,我們通過少量代碼所能做到的遠不止于此。我們可以獲得自動生成的幫助菜單:
python hello_cli.py --help Usage: hello_cli.py [options] Options: -h, --help show this help message and exit -p PERSON, --person=PERSON
從幫助菜單中可以了解到,我們可以使用兩種方法來更改 Hello World 的輸出:
|
新聞熱點
疑難解答