click option/argument参数详解(click.option()和click.argument())
click通過click.command()裝飾函數,使之成為命令行接口;通過click.option()裝飾函數,為其約束并添加命令行選項和參數。簡化了傳統加參的方式,減少了開發者編寫的代碼量,使命令行工具編寫起來快速而有趣。
新建一個名為adduser.py的Python文件,寥寥幾行代碼已經實現了一個完整命令行工具。
import click@click.command() @click.option("--name",required=True) def add(name):click.echo(f"add user {name}")if __name__ == "__main__":add()首先定義了一個add()函數,通過click.command()將add()函數裝飾成一個命令接口,這樣可以直接在命令行上通過“python 文件名.py ”的形式直接調用add()函數,再通過click.option()為add()函數添加選項“--name”,此選項即可通過命令行輸入的形式傳給add()函數。
一、click.option中參數的修飾字段匯總
1.required
click.option()函數中有個required字段,當required=True時表示這個選項在命令行輸入參數時必須帶上,否則會報錯。當required=False時,表示此參數可帶可不帶。
如果將required=False,則命令是可以執行成功的。
import click@click.command() @click.option('-n',"--name",required=False) def add(name):click.echo(f"add user {name}")if __name__ == "__main__":add()click.option()還有許多其他參數字段,用來限制或者擴展選項,以滿足開發者的需要。
2.default
為當前的選項添加default值。即使此時required=True,命令行也可以不輸入參數值,如果命令行不輸入參數值表示此時輸入的是默認值。
import click@click.command() @click.option("--name",required=True,default="golden") def add(name):click.echo(f"add user {name}")if __name__ == "__main__":add()3.nargs
指定命令行參數接收的值的個數,等于-1表示接受參數不限
import click@click.command() @click.option("--name",required=True,nargs=2) def add(name):print(name)click.echo(f"add user {name}")if __name__ == "__main__":add()4.type
指定輸入選項對應的參數的數據類型,未指定時默認是str字符串類型。
import click@click.command() @click.option("--name",required=True) #@click.option("--name",required=True,type=str) #等同于上一句 def add(name):print(type(name)) #打印輸入參數name的數據類型click.echo(f"add user {name}")if __name__ == "__main__":add()4.1 type字段對應的數據類型
| str / click.STRING | 表示字符串類型,這也是默認類型 |
| int / click.INT | 表示整型 |
| float / click.FLOAT | 表示浮點型 |
| bool / click.BOOL | 表示布爾型。對于 1、yes、y 和 true 會轉化為 True;0、no、n 和 false 會轉化為 False |
| click.UUID | 表示 UUID,會自動將參數轉換為 uuid.UUID 對象 |
| click.FILE | 表示文件,會自動將參數轉換為文件對象,并在命令行結束時自動關閉文件 |
| click.PATH | 表示路徑 |
| click.IntRange | 表示范圍選項 |
| click.Choice | 限定參數值 @click.option('-c',required=True,type=click.Choice(['start','stop'])) ? |
?
?
?
5.multiple
multiple=True,使用多個相同地位選項分別指定值
import click@click.command() @click.option("-N","-n","--name",required=True,type=str,multiple=True) def add(name):print(name)click.echo(f"add user {name}")if __name__ == "__main__":add()三個選項地位相同,使用的時候可以三選一,可以解決某些要求選項不區分大小寫的情況。輸入的參數值是以元組的形式傳入函數中。
6.prompt
當在命令行中沒有輸入相應的參數時,會根據 prompt 提示用戶輸入。一般用于密碼驗證。prompt=True表示接受用戶輸入,hide_input=True表示隱藏輸入的內容,confirmation_prompt=True表示再次確認輸入的內容。當然也可以直接在命令行中輸入。
import click@click.command() @click.option("--name",required=True,type=str) @click.option("--password", prompt=True, hide_input=True, confirmation_prompt=True) #@click.password_option() #作用同上句一樣,是click對上句的封裝 def add(name,password):print(name,password)click.echo(f"add user {name}")if __name__ == "__main__":add()?
7.is_eager、is_eager、callback,is_flag
Click 提供 eager 標識對參數名進行標識,如果輸入該參數,則會攔截既定的命令行執行流程,跳轉去執行一個回調函數。
is_eager=True???????????? 表明該命令行選項優先級高于其他選項;
expose_value=False?? 表示如果沒有輸入該命令行選項時,會執行既定的命令行流程;
callback=函數名 ? ? ? ?? 指定了輸入該命令行選項時,要跳轉執行的函數;
is_flag=True??????????????? 表明參數值可以省略。
這四個修飾字段一般會同時使用。
import clickdef print_version(ctx, param, value):print("this program version : 0.1")exit()@click.command() @click.option("--name",required=True,type=str) @click.option("--version",is_eager=True,expose_value=False,callback=print_version,is_flag=True) def add(name):print(name)click.echo(f"add user {name}")if __name__ == "__main__":add()is_eager=True表示--version的優先級高于其他選項比如--name,當命令行同時出現這兩個參數時,會優先執行--version。
is_flag=True表示該選項的參數值可以省略,就算加上也沒有意義
expose_value=False表示命令行中沒有出現--version選項時,會執行click既定的命令流程
callback=print_version,表示當命令行中出現--version時,不在執行click既定的命令流程,轉而執行print_version()函數。
二、click.argument()
click.argument()比click.option()用法簡單很多,也是用來修飾函數為其添加參數的。不同的是argument()只是添加參數,不添加選項。上面option()中用到的修飾字段也可以用于argument()。
import click@click.command() #@click.option("--name",required=True,type=str) @click.argument("name") def add(name):click.echo(f"add user {name}")if __name__ == "__main__":add()?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的click option/argument参数详解(click.option()和click.argument())的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带你快速入门AXI4总线--AXI4-L
- 下一篇: 【JavaScript】牛客编程:实现一