實作腳本指令行的庫有:
- 内置庫sys
- 内置庫argparse
- 第三方庫click
- 第三方庫fire
sys.argv 包含指令行參數清單,第一個參數是檔案名
sys_demo.py
import sys
def add(a, b):
return a + b
if __name__ == '__main__':
ret = add(sys.argv[1], sys.argv[2])
print(ret)
運作結果
(py3) $ python sys_demo.py 1 2
12
python自帶的參數解析,思路還算清晰,就是代碼較多
argparse_demo.py
import argparse
def add(a, b):
return a + b
if __name__ == '__main__':
# 初始化解析器
parser = argparse.ArgumentParser()
# 定義參數
parser.add_argument("-a", "--a", help="參數a")
parser.add_argument("-b", "--b", help="參數b")
# 解析
args = parser.parse_args()
ret = add(args.a, args.b)
print(ret)
(py3) $ python argparse_demo.py -a 1 -b 2
12
click庫
click庫使用裝飾器,不過已經對源代碼進行了修改
click_demo.py
import click
@click.command()
@click.option("-a", "--a", help="參數a")
@click.option("-b", "--b", help="參數b")
def add(a, b):
click.echo(a + b)
if __name__ == '__main__':
ret = add()
print(ret)
(py3) $ python click_demo.py -a 1 -b 2
12
fire庫
說實話,fire庫太優秀了,簡潔,而且Fire可以
- 不接收參數
- 接收函數名
- 接收字典
- 接收對象
import fire
def add(a, b):
return a + b
if __name__ == '__main__':
fire.Fire()
(py3) $ python fire_demo.py add 1 2
3
比較發現,唯獨fire将我輸入的數字型字元串轉為了數字,進行相加,輸出3,其他三個庫均預設為字元串,輸出12
參考 一個“牛逼”的 Python 指令行解析庫 The Python Fire Guide