使用 Python 和 Click 編寫命令行應用程序
來自專欄 極光日報
導讀:python 構建命令行應用的第三方比較有名的包除了 click 之外還有一個叫 docopt,這是一個以文檔先行為目標的包。個人是比較傾向於 Click 的,看了這篇文章之後,也很快寫了一個 demo。
我對命令行很著迷。
我想為自己構建一個命令行應用程序,有這個想法之後,經過一番研究,我發現 Python 自帶的內置模塊 argparse 是不夠的。
然後,我發現了「Click」模塊。所以,今天,我們將嘗試使用 Python 和 Click 創建一個基本的應用程序。
安裝
$ pip install click
Hello, World
讓我們保持傳統,首先編寫一個「Hello,World」,將這個文件命名為 cli.py
import click@click.command()def hello(): click.echo(Hello World!)
click.echo()
向給定的文件或標準輸出列印一條消息外加一個換行符,初看起來,這很像 print
函數,但它改進了對處理 Unicode 和二進位數據的支持。
command
裝飾器將函數轉換成一個可以被調用的命令:
if __name__ == __main__: hello()
調用時是這樣的:
$ python hello.pyHello World!
對應的幫助信息是這樣的:
$ python hello.py --helpUsage: hello.py [OPTIONS]Options: --help Show this message and exit.
參數
目前,我們沒有太多的計劃工作,讓我們給它添加一些參數。
import click@click.command()@click.argument(name)def hello(name): click.echo(f"Hello, {name}!")if __name__ == __main__: hello()
運行:
$ python cli.py AnshulHello, Anshul!
如果沒有參數,運行:
$ python cli.pyUsage: cli.py [OPTIONS] NAMEError: Missing argument "name".
選項
顧名思義,這些是選項,不同於我們上面看到的參數,選項是可選的,不是強制性的。
import click@click.command()@click.option(--count, default=1, help="Number of greetings.")@click.argument(name)def hello(count, name): for i in range(count): click.echo(f"Hello, {name}!")if __name__ == __main__: hello()
運行:
$ python cli.py Anshul --count 3Hello, Anshul!Hello, Anshul!Hello, Anshul!
布爾 flags
有一些選項不需要任何值,他們只是 flag(即標識)。例如 --help 命令,它並不需要一個值,另一個可能在使用 cli 工具時會注意到的例子是 --version。
import click@click.command()@click.option(--flag, is_flag=True)def hello(flag): if flag: click.echo("Our flag will sail high and above!") else: click.echo("Well, that didnt go as planned!")if __name__ == __main__: hello()
運行:
$ python cli.pyWell, that didnt go as planned!$ python cli.py --flagOur flag will sail high and above!
現在就是這樣,從這裡開始你就可以做很多事情了
原文: How to write a command-line application using Python and Click
擴展閱讀:
- Python 3.7 將引入 dataclass 裝飾器
- Flask 發布 1.0 穩定版
- Python:range 對象並不是迭代器
- PyPI 終於支持 Markdown 了
極光日報,極光開發者旗下媒體。
每天導讀三篇英文技術文章。
推薦閱讀:
※如何用c++監控windows和linux文件夾中文件的變化,有沒有什麼api可以讓系統在保存文件的時候通知程序?
※如何在 Linux 系統中防止文件和目錄被意外的刪除或修改
※升級 kernel 4.9 體驗 TCP BBR 記錄
※關於linux目錄刪除的問題?
※怎樣才算有自主知識產權的操作系統?研發「自主知識產權」的操作系統對中國的社會和經濟有何意義?