python_click.option()使用

click官方文檔

  • click官方文檔
  • click的option詳細使用
  • 推薦文章
  • click.command():將該方法變成一個命令行工具
  • click.option():通過指定命令行選項的名稱,從命令行讀取參數值,再將其傳遞給函數。
  • click.option(’–count’, default=1,prompt=‘Your name’,type=int,nargs=1,help=‘Number of greetings’)
    • –或-:參數前綴
    • default: 設置命令行參數的默認值
    • help: 參數說明
    • type: 參數類型,可以是 str, int, float ,也可以是選擇參數
    • prompt: 當在命令行中沒有輸入相應的參數時,會根據 prompt 提示用戶輸入
    • hide_input: 隱藏輸入的參數
    • confirmation_prompt:對輸入的命令參數檢查兩次是否一致
    • nargs: 指定命令行參數接收的值的個數, -1 表示可以接收多個參數
# entrance.py
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings')
@click.option('--name', prompt='Your name', help='The person to greet.')
def hello(count, name):
    for x in range(count):
        click.echo(f'hello {name}')
if __name__ == '__main__':
    hello()
E:\proj\crawl_spider>python entrance.py --count 3 --name Shirmay1
hello Shirmay1
hello Shirmay1
hello Shirmay1
1、參數前綴@click.option(’–n’, ‘-n’, default=1)
  • 默認的參數前綴 – 和 -;參數未指定類型,使用默認值的類型,如果沒有默認值,則爲string類型。以下例子參數類型與默認值一致爲int類型
import click
@click.command()
@click.option('--n', '-n', default=1)
def dots(n):
    click.echo('.' * n)
if __name__ == '__main__':
    dots()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py --n 3
...
E:\proj\crawl_spider>python entrance.py -n 4
....
2、參數個數限制@click.option(’–pos’, nargs=2, type=float)
  • nargs指定可傳入的參數個數,並將值存儲爲元組
import click
@click.command()
@click.option('--pos', nargs=2, type=float)
def findme(pos):
    click.echo(pos)
if __name__ == '__main__':
    findme()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py --pos 3.0
Error: --pos option requires 2 arguments
E:\proj\crawl_spider>python entrance.py --pos 3.0 8.0
(3.0, 8.0)
3、參數類型及個數限制@click.option(’–item’, type=(str, int))
  • 通過使用元組作爲type類型,nargs會自動設置爲元組的長度。如下沒有設置 nargs,但 nargs 會自動取 tuple 的長度值
import click
@click.command()
# @click.option('--item', nargs=2, type=click.Tuple([str, int]))
@click.option('--item', type=(str, int))
def putitem(item):
    click.echo(item)
if __name__ == '__main__':
    putitem()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py --item peter
Error: --item option requires 2 arguments
E:\proj\crawl_spider>python entrance.py --item peter 123
('peter', 123)
4、參數多次使用@click.option(’–message’, ‘-m’, multiple=True)
  • multiple支持同一個參數多次使用,多次提供的參數並記錄所有值
import click
@click.command()
@click.option('--message', '-m', multiple=True)
def commit(message):
    click.echo('\n'.join(message))
if __name__ == '__main__':
    commit()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py -m foo
foo
E:\proj\crawl_spider>python entrance.py -m foo -m woo
foo
woo
5、參數限制@click.option(’–choice_type’, type=click.Choice([‘md512’, ‘int67’]))
  • 使 Click.choice 類型來限定傳參爲哪幾個值;當上面的命令行程序參數 --choice_type不是 ‘md512’, ‘int67’,就會輸出錯誤提示
import click
@click.command()
@click.option('--choice_type', type=click.Choice(['md512', 'int67']))
def digest(choice_type):
    click.echo(f'choice_type:{choice_type}')
if __name__ == '__main__':
    digest()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py --choice_type md512
choice_type:md512
6、參數未輸入提示@click.option(’–name’, prompt=‘please input your name’)
  • 如果在執行 hello 時沒有提供 –name 參數,控制檯會提示用戶輸入該參數。也可以自定義控制檯的提示輸出,把 prompt 改爲自定義內容即可。
import click
@click.command()
# @click.option('--name', prompt='please input your name')
@click.option('--name', prompt=True)
def hello(name):
    click.echo(f'Hello {name}')
if __name__ == '__main__':
    hello()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py
Name: Shirmay1
Hello Shirmay1
E:\proj\crawl_spider>python entrance.py
please input your name: Shirmay1
Hello Shirmay1
7、密碼提示@click.option(’–password’, prompt=True, hide_input=True, confirmation_prompt=True)
  • hide_input隱藏輸入的數字,confirmation_prompt確認兩次輸入是否一樣。option 的 hide_input 和 confirmation_promt 標識就是用來控制密碼參數的輸入。
import click
@click.command()
@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True)
def input_password(password):
    click.echo(f'password:{password}')
if __name__ == '__main__':
    input_password()

---------------------分割線,與上面的是一樣的功能--------------------
import click
@click.command()
@click.password_option()
def input_password(password):
    click.echo(f'password:{password}')
if __name__ == '__main__':
    input_password()
--------------------分割線cmd輸入--------------------------
E:\proj\crawl_spider>python entrance.py
Password:
Repeat for confirmation:
password:1234
------------------hide_input=False--------------------------------------
E:\proj\crawl_spider>python entrance.py
Password: 1234
Repeat for confirmation: 12
Error: the two entered values do not match
Password: 1234
Repeat for confirmation: 1234
password:1234
8、布爾標記@click.option(’–shout/–no-shout’, default=False)
  • 布爾標記是用來啓用或禁用的選項,你可以用/分隔符來實現啓用或禁用選項。如果只想爲第二個選項定義別名,則需要使用前導空格來消除格式字符串的歧義。
import sys
import click
@click.command()
@click.option('--shout/--no-shout', default=False)
def info(shout):
    rv = sys.platform
    if shout:
        rv = rv.upper() + '!!!!111'
    click.echo(rv)
if __name__ == '__main__':
    info()
---------------------分割線,不想要關閉開關,用is_flag參數告知click這是一個boolean標記--------------------
import sys
import click
@click.command()
@click.option('--shout', is_flag=True)
def info(shout):
    rv = sys.platform
    if shout:
        rv = rv.upper() + '!!!!111'
    click.echo(rv)
if __name__ == '__main__':
    info()
---------------------分割線爲--no-shout起別名-S--------------------
import sys
import click
@click.command()
@click.option('--shout/--no-shout', ' /-S', default=False)
def info(shout):
    rv = sys.platform
    if shout:
        rv = rv.upper() + '!!!!111'
    click.echo(rv)
if __name__ == '__main__':
    info()
--------------------分割線cmd輸入--------------------------
E:\project\practice>python entrance.py --shout
WIN32!!!!111
E:\project\practice>python entrance.py --no-shout
win32
E:\project\practice>python entrance.py -S
win32
9、參數大小寫輸出@click.option(’–lower’, ‘transformation’, flag_value=‘lower’)
  • 功能開關。這些是通過將多個選項設置爲相同的參數名稱並定義標誌值來實現的。請注意,通過提供flag_value參數,Click將隱式設置is_flag=True。
import sys
import click
@click.command()
@click.option('--upper', 'transformation', flag_value='upper', default=True)
@click.option('--lower', 'transformation', flag_value='lower')
def info(transformation):
    click.echo(getattr(sys.platform, transformation)())
if __name__ == '__main__':
    info()
--------------------分割線cmd輸入--------------------------
E:\project\practice>python entrance.py --upper
WIN32
E:\project\practice>python entrance.py --lower
win32

https://isudox.com/2016/09/03/learning-python-package-click/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章