標籤:

使用 Python 和 Click 編寫命令行應用程序

使用 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目錄刪除的問題?
怎樣才算有自主知識產權的操作系統?研發「自主知識產權」的操作系統對中國的社會和經濟有何意義?

TAG:Linux | Python |