Python程式設計:使用sys、argparse、click、fire實現命令列解析
阿新 • • 發佈:2018-11-08
python實現指令碼命令列的庫有:
- 內建庫sys
- 內建庫argparse
- 第三方庫click
- 第三方庫fire
內建庫sys
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
內建庫argparse
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