Click是一個用於編寫命令行接口的Python包。它為您生成了漂亮的文檔,並允許您用一行代碼構建命令行界面。簡而言之:它非常棒,可以幫助你的程序更上一層樓。
下面是如何使用它來活躍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()這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行代碼中實現相同的邏輯。將為您分析參數,並生成幫助屏幕:
這個基本的比較顯示了使用Click等程序可以節省多少時間和精力。雖然命令行界面在最終用戶看來可能是相同的,但是底層代碼更簡單,而且您將節省大量的編碼時間。您在將來編寫的任何更改或更新也會顯著增加開發時間。
在使用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配置單擊以接受來自命令行的參數,它將把這些參數傳遞給您的方法。這裡使用了三個參數:
讓我們看一下點擊操作。從命令行運行腳本,但按如下方式傳入total參數:
python click_example.py --total 10通過設置--10,從命令行,腳本將打印十個隨機蔬菜。
如果傳入--help標誌,您將看到一個很好的幫助頁面,以及可以使用的選項:
python click_example.py --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幫助屏幕也已更改:
以下是完整的代碼(為了保持整潔,進行了一些小的重構):
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正如您所看到的,Click很容易使用,但是非常強大。雖然這些示例只介紹了Click的基本功能,但是現在您已經掌握了很多基本功能,您還可以瞭解更多的功能。
如果您正在尋找一些Python項目來練習新發現的技能,為什麼不學習如何使用Python控制Arduino,或者使用Python閱讀和編寫Google工作表呢?這兩個項目中的任何一個都非常適合轉換為Click!
...式語言和一個用於統計分析的軟體環境,用於表示圖形。使用R的主要優點是它可以用於實現統計概念,如線性和非線性建模、時間序列分析、聚類等。 R是一種解釋語言,因此每一行都由直譯器一行接一行地讀。它是一種高階程...
... 本文將向您展示如何使用Python程式從命令列設定一個Arduino UNO(儘管任何與Arduino相容的板都可以在這裡工作)。本教程是為Windows10編寫的,但也適用於Mac和Linux。你甚至可以使用這個工作...
... 下面是如何表示物件陣列。在這種表示法中,陣列的每一項都是一個物件。以下是棒球運動員的工資樣本。 ...
... 要做這些事情,您需要知道如何在Pi上安裝軟體。通常沒有microSD卡,這也意味著你需要知道如何安裝主軟體:作業系統。 ...
有沒有想過如何在兩種程式語言之間傳送資料?是否嘗試傳送一個物件或多個數據段? ...
...您是一名經驗豐富的Python開發人員,還是剛剛起步,學習如何設定虛擬環境對於任何Python專案都是必不可少的。和我一起討論Python虛擬環境的所有知識。 ...
... 在本文中,我將向您展示如何使用Python讀寫googlesheets。如果您剛剛開始Python之旅,那麼以下5個學習Python的最佳網站是一個很好的起點。 ...
...。哦,快樂。我在這裡讓你的工作更容易,透過向你展示如何**一個簡單的運動感應樹莓皮萬聖節音箱。下面是一個演示: ...
在這個快速簡單的Raspberry Pi專案中,您將學習如何**Gmail電子郵件通知燈。如果您有任何未讀的電子郵件,Python指令碼會開啟指示燈。這個專案需要很少的部分,可以在一個小時內完成!當然,你可以把你的LED打扮成任何你喜歡...