如何使用click在python中建立自己的命令列程式

想自己製作Python命令列程式,但發現它太難了?使用Click,一個有用的Python工具來簡化程式碼。...

Click是一個用於編寫命令行接口的Python包。它為您生成了漂亮的文檔,並允許您用一行代碼構建命令行界面。簡而言之:它非常棒,可以幫助你的程序更上一層樓。

pythod-programming-click

下面是如何使用它來活躍Python項目。

無需單擊即可編寫命令行程序

編寫命令行程序是可能的,而不使用Click,但是這樣做需要更多的努力和更多的代碼。您需要解析命令行參數、執行驗證、開發邏輯來處理不同的參數,以及構建自定義幫助菜單。要添加新選項嗎?然後,您將修改您的幫助函數。

編寫自己的代碼沒有什麼問題,這樣做是學習Python的一個好方法,但是單擊允許您遵循“不要重複自己”(乾燥)原則。不單擊,您將編寫代碼,它是脆弱的,需要大量維護,無論何時發生任何更改。

下面是一個簡單的命令行界面,沒有單擊:

import sysimport randomdef do_work():""" Function to handle command line usage"""args = sys.argvargs = args[1:] # First element of args is the file nameif len(args) == 0:print('You have not passed any commands in!')else:for a in args:if a == '--help':print('Basic command line program')print('Opti***:')print(' --help -> show this basic help menu.')print(' --monty -> show a Monty Python quote.')print(' --veg -> show a random vegetable')elif a == '--monty':print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?')elif a == '--veg':print(random.choice(['Carrot', 'Potato', 'Turnip']))else:print('Unrecognised argument.')if __name__ == '__main__':do_work()

Python command line interface example

這27行Python運行良好,但非常脆弱。對程序所做的任何更改都需要大量其他支持代碼才能更改。如果更改參數名稱,則需要更新幫助信息。這段代碼很容易失控。

點擊的邏輯是一樣的:

import clickimport [email protected]()@click.option('--monty', default=False, help='Show a Monty Python quote.')@click.option('--veg', default=False, help='Show a random vegetable.')def do_work(monty, veg):""" Basic Click example will follow your commands"""if monty:print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?')if veg:print(random.choice(['Carrot', 'Potato', 'Turnip']))if __name__ == '__main__':do_work()

這個單擊示例在16行代碼中實現相同的邏輯。將為您分析參數,並生成幫助屏幕:

Python Click automatically generated help screen

這個基本的比較顯示了使用Click等程序可以節省多少時間和精力。雖然命令行界面在最終用戶看來可能是相同的,但是底層代碼更簡單,而且您將節省大量的編碼時間。您在將來編寫的任何更改或更新也會顯著增加開發時間。

單擊python入門

在使用Click之前,您可能希望配置一個虛擬環境。這將阻止您的Python包與您的系統Python或您可能正在處理的其他項目發生衝突。如果您想玩Python並單擊,也可以在瀏覽器中嘗試Python。

最後,確保您運行的是pythonversion3。可以在pythonversion2中使用Click,但是這些示例在python3中。進一步瞭解python2和python3之間的區別。

準備好後,使用PIP從命令行單擊install(如何為Python安裝PIP):

pip install click

編寫第一個點擊程序

在文本編輯器中,從導入開始,單擊:

import click

導入後,創建一個方法和一個主入口點。我們的Python OOP指南更詳細地介紹了這些內容,但它們提供了一個存儲代碼的地方,以及Python開始運行代碼的方法:

import clickimport randomdef veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']))if __name__ == '__main__': veg()

這個非常簡單的腳本將輸出一個隨機的蔬菜。您的代碼看起來可能不同,但這個簡單的示例非常適合與Click結合使用。

另存為單擊_示例.py,然後在命令行中運行它(導航到其位置後):

python click_example.py

你應該看到一個隨機的蔬菜名稱。讓我們通過添加Click來改進。將代碼更改為包含Click decorators和for循環:

@click.command()@click.option('--total', default=3, help='Number of vegetables to output.')def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']))if __name__ == '__main__': veg()

運行時,您將看到一個隨機蔬菜顯示三次。

讓我們把這些變化分解一下。那個@click.command命令()decorator配置單擊以使用緊跟在decorator後面的函數。在本例中,這是veg()函數。你將需要這個為每一個方法,你想使用與點擊。

那個@單擊.optiondecorator配置單擊以接受來自命令行的參數,它將把這些參數傳遞給您的方法。這裡使用了三個參數:

  1. --total:這是total參數的命令行名稱。
  2. 默認值:如果在使用腳本時未指定total參數,單擊將使用默認值中的值。
  3. 幫助:一個簡短的句子解釋如何使用你的程序。

讓我們看一下點擊操作。從命令行運行腳本,但按如下方式傳入total參數:

python click_example.py --total 10

通過設置--10,從命令行,腳本將打印十個隨機蔬菜。

如果傳入--help標誌,您將看到一個很好的幫助頁面,以及可以使用的選項:

python click_example.py --help

Python Click help

添加更多命令

可以在同一個函數上使用多個Click decorator。向veg函數添加另一個單擊選項:

@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')

別忘了把它傳遞到方法中:

def veg(total, gravy):

現在運行文件時,可以傳入gravy標誌:

python click_example.py --gravy y

幫助屏幕也已更改:

Python Click help screen

以下是完整的代碼(為了保持整潔,進行了一些小的重構):

import clickimport [email protected]()@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')@click.option('--total', default=3, help='Number of vegetables to output.')def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice)if __name__ == '__main__': veg()

更多點擊選項

一旦你知道了基本知識,你就可以開始看更復雜的點擊選項。在本例中,您將學習如何將多個值傳遞給單個參數,單擊該參數將轉換為元組。您可以在Python字典指南中瞭解更多關於元組的信息。

創建一個名為click\u example\u 2.py的新文件。以下是您需要的啟動代碼:

import clickimport [email protected]()def add(): """ Basic method will add two numbers together.""" passif __name__ == '__main__': add()

這裡沒有什麼新鮮事。上一節詳細解釋了此代碼。添加@單擊.option被叫號碼:

@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')

這裡唯一的新代碼是nargs=2和type=int選項。這告訴Click接受numbers選項的兩個值,並且它們都必須是整數類型。您可以將其更改為您喜歡的任何數字或(有效)數據類型。

最後,更改add方法以接受numbers參數,並對它們進行一些處理:

def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}')

您傳入的每個值都可以通過numbers對象訪問。下面是如何在命令行中使用它:

python click_example_2.py --numbers 1 2

Python Click nargs result

click是python實用程序的解決方案

正如您所看到的,Click很容易使用,但是非常強大。雖然這些示例只介紹了Click的基本功能,但是現在您已經掌握了很多基本功能,您還可以瞭解更多的功能。

如果您正在尋找一些Python項目來練習新發現的技能,為什麼不學習如何使用Python控制Arduino,或者使用Python閱讀和編寫Google工作表呢?這兩個項目中的任何一個都非常適合轉換為Click!

  • 發表於 2021-03-23 13:56
  • 閱讀 ( 70 )
  • 分類:程式設計

你可能感興趣的文章

r(r)和python(python)的區別

...式語言和一個用於統計分析的軟體環境,用於表示圖形。使用R的主要優點是它可以用於實現統計概念,如線性和非線性建模、時間序列分析、聚類等。 R是一種解釋語言,因此每一行都由直譯器一行接一行地讀。它是一種高階程...

  • 發佈於 2020-10-20 09:33
  • 閲讀 ( 56 )

學習python?下面是如何複製檔案

...然需要採用某種方法來學習。因此,讓我們透過本文了解如何使用Python複製檔案。 ...

  • 發佈於 2021-03-11 10:45
  • 閲讀 ( 54 )

如何用python程式設計和控制arduino

... 本文將向您展示如何使用Python程式從命令列設定一個Arduino UNO(儘管任何與Arduino相容的板都可以在這裡工作)。本教程是為Windows10編寫的,但也適用於Mac和Linux。你甚至可以使用這個工作...

  • 發佈於 2021-03-11 16:20
  • 閲讀 ( 75 )

json-python解析:簡單指南

... 下面是如何表示物件陣列。在這種表示法中,陣列的每一項都是一個物件。以下是棒球運動員的工資樣本。 ...

  • 發佈於 2021-03-13 11:20
  • 閲讀 ( 48 )

在raspberry pi上安裝軟體的5種方法

... 要做這些事情,您需要知道如何在Pi上安裝軟體。通常沒有microSD卡,這也意味著你需要知道如何安裝主軟體:作業系統。 ...

  • 發佈於 2021-03-15 00:30
  • 閲讀 ( 50 )

如何讓python和javascript使用json進行通訊

有沒有想過如何在兩種程式語言之間傳送資料?是否嘗試傳送一個物件或多個數據段? ...

  • 發佈於 2021-03-16 01:22
  • 閲讀 ( 72 )

瞭解如何使用python虛擬環境

...您是一名經驗豐富的Python開發人員,還是剛剛起步,學習如何設定虛擬環境對於任何Python專案都是必不可少的。和我一起討論Python虛擬環境的所有知識。 ...

  • 發佈於 2021-03-16 10:00
  • 閲讀 ( 56 )

如何用python讀寫google工作表

... 在本文中,我將向您展示如何使用Python讀寫googlesheets。如果您剛剛開始Python之旅,那麼以下5個學習Python的最佳網站是一個很好的起點。 ...

  • 發佈於 2021-03-16 13:43
  • 閲讀 ( 73 )

用diy動作啟用的音箱嚇唬不給糖就搗蛋的人

...。哦,快樂。我在這裡讓你的工作更容易,透過向你展示如何**一個簡單的運動感應樹莓皮萬聖節音箱。下面是一個演示: ...

  • 發佈於 2021-03-17 05:08
  • 閲讀 ( 54 )

製作一個樹莓皮gmail通知燈

在這個快速簡單的Raspberry Pi專案中,您將學習如何**Gmail電子郵件通知燈。如果您有任何未讀的電子郵件,Python指令碼會開啟指示燈。這個專案需要很少的部分,可以在一個小時內完成!當然,你可以把你的LED打扮成任何你喜歡...

  • 發佈於 2021-03-17 17:32
  • 閲讀 ( 55 )