Python 命令列介面程式設計?
在本節中,我們將使用 Python 開發一個命令列介面。但在深入研究程式之前,讓我們先了解一下命令列。
命令列自計算機程式誕生以來就一直存在,並且建立在命令之上。命令列程式是從 shell 或命令列執行的程式。
命令列介面提供了一種使用者介面,使用者透過在終端、shell 或控制檯上鍵入命令來導航,而不是使用滑鼠。
命令列介面 (CLI) 從一個可執行檔案開始。我們可以根據指令碼的開發方式傳遞引數,例如:
**引數 (Arguments):** 我們需要提供傳遞給指令碼的引數。如果我們沒有提供它,CLI 將會報錯。例如,在這個命令中,numpy 是引數:pip install numpy。
**選項 (Options):** 一個可選引數,它帶有名稱和值對,例如:pip install django –cache-dir ./my-cache-dir,其中 –cache_dir 是一個可選引數,值 ./my-cache-dir 將用作快取目錄。
**標誌 (Flags):** 另一個可選引數,它告訴指令碼啟用或停用某種行為,例如 –help 引數。
Python 提供多個 Python 包來編寫命令列介面,例如 “click”。Click 允許我們用很少的程式碼行構建命令列介面。
下面是一個不使用 click 包的命令列介面程式。編寫 CLI 程式可能不如使用 “click” 包時那樣優雅,因為 “click” 允許你遵循“不要重複自己”(DRY)原則。
不使用 click 包的命令列介面
import sys
import random
def do_work():
""" Function to handle command line usage"""
args = sys.argv
args = args[1:] # First element of args is the file name
if 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('Options:')
print(' --help -> show this basic help menu.')
print(' --monty -> show a Monty Python quote.')
print(' --veg -> show a random vegetable')
elif a == '--monty':
print('He’s not the Messiah—he’s a very naughty boy')
elif a == '--veg':
print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip']))
else:
print('Unrecognised argument.')
if __name__ == '__main__':
do_work()輸出
c:\Python\Python361>python cli_interp1.py --monty He’s not the Messiah—he’s a very naughty boy c:\Python\Python361>python cli_interp1.py --help Basic command line program Options: --help -> show this basic help menu. --monty -> show a Monty Python quote. --veg -> show a random vegetable c:\Python\Python361>python cli_interp1.py --veg Tomato c:\Python\Python361>python cli_interp1.py --error Unrecognised argument.
正如你在上面的程式中看到的,它在更改引數名稱方面靈活性不高。
下面是使用 Python click 包實現 CLI 的相同程式。
import click
import random
@click.command()
@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('He’s not the Messiah—he’s a very naughty boy')
if veg:
print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip']))
if __name__ == '__main__':
do_work()輸出
c:\Python\Python361>python cli_interp2.py --help Usage: cli_interp2.py [OPTIONS] Basic Click example will follow your commands Options: --monty TEXT Show a Monty Python quote. --veg TEXT Show a random vegetable. --help Show this message and exit.
上面的程式表明,使用 “click” 包編寫 CLI 更加容易,並節省了大量程式設計師的工作。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP