天天看點

argparse指令行解析子產品

argparse指令行解析子產品

文章目錄

  • ​​argparse指令行解析子產品​​
  • ​​argparse子產品中的ArgumentParser對象​​
  • ​​ArgumentParser對象常用方法​​

一個可執行檔案或者腳本都可以接受參數。

ls -l /etc
# /etc 是位置參數
# -l 是短選項
# /etc對應的是位置參數 -l對應的是選項參數      
  • 參數分類:
  1. 位置參數:參數放在那裡,就要對應一個參數位置。
  2. 選項參數:必須通過前面是-的短選項或者--長選項,開頭的字元串,後面字元才算選項參數,當然選項後面也可以沒有參數。

argparse子產品中的ArgumentParser對象

  • argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars=’-’, fromfile_prefix_chars=None, argument_default=None, conflict_handler=‘error’, add_help=True, allow_abbrev=True)->ArgumentParser對象
  • prog#程式的名字,預設使用sys.argv[0]的basename
  • usage#str類型,描述程式使用情況的字元串。預設值為None,表示由添加到程式使用參數的字元串生成。
  • description#str類型。程式的描述資訊
  • epilog#str類型。參數help之後顯示的文本資訊。
  • parents#list類型。ArgumentParser對象中使用的參數組成的清單。預設值為[]空清單
  • formatter_class#class。自定義幫助輸出的類。
  • prefix_chars#字首參數的字元集合。預設值為"-"
  • fromfile_prefix_chars#附加參數的字首檔案的一組字元
  • argument_default#參數的全局預設值,預設值為None
  • confict_handler#解決沖突選項的政策,通常不需要設定。
  • add_help#是否自動為解析器增加-h和–help選項,預設值為True
  • allow_abbrev#允許長選項被縮寫 預設值為:True
  • 簡單示例:
import argparse
parser = argparse.ArgumentParser() #獲得一個參數解析器
args = parser.parse_args("") #分析參數 注意:如果是控制台允許可以将參數“”去掉,接受控制台傳入
parser.print_help() #列印幫助      

執行結果為:

  1. argparse不僅僅幫助做了參數解析,還會自動幫助生成幫助資訊。尤其是usage,可以看到現在定義的參數是否是自己想要的。

ArgumentParser對象常用方法

  • add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
  • name or flags # 參數名稱 例如-f,–foo
  • action #指令行中遇到此參數後采取的基本操作類型
  • action可選值為如下:都是str類型。
  • “store” #預設操作,表示添加的參數用來存儲一個值。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args('--foo 1'.split())
Namespace(foo='1')      
  • “store_const” #需要結合const來使用表示參數,如果使用者傳入了指定的參數,那麼參數對應的值九尾const指定的值。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args(['--foo'])
Namespace(foo=42)      
  • “store_true” #使用者指定了參數。那麼參數對應的值就為True,否則為False
  • “store_false” #使用者指定了參數。那麼參數對應的值就為False,否則為True
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(foo=True, bar=False, baz=True)      
  • “append” #使用者可以多次為參數設定值,值會存儲在一個清單中。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])      
  • “append_const” #最佳參數,可以和多個設定的參數聯合使用。如果兩個參數同時設定,會規整到同一個屬性上。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--str', dest='types', action='append_const', const=str)
>>> parser.add_argument('--int', dest='types', action='append_const', const=int)
>>> parser.parse_args('--str --int'.split())
Namespace(types=[<class 'str'>, <class 'int'>])      
  • “count” #統計關鍵字參數出現的次數
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count')
>>> parser.parse_args(['-vvv'])
Namespace(verbose=3)      
  • “version” #在add_argument()中使用,通常用來列印版本資訊
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0      
  • nargs #這參數接受結果參數
  • N #數字,必輸是指定數目個數
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs=2)
>>> parser.add_argument('bar', nargs=1)
>>> parser.parse_args('c --foo a b'.split())
Namespace(bar=['c'], foo=['a', 'b'])      
  • ? #表示可有可無
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='?', const='c', default='d')
>>> parser.add_argument('bar', nargs='?', default='d')
>>> parser.parse_args(['XX', '--foo', 'YY'])
Namespace(bar='XX', foo='YY')
>>> parser.parse_args(['XX', '--foo'])
Namespace(bar='XX', foo='c')
>>> parser.parse_args([])
Namespace(bar='d', foo='d')      
  • 還可以配合指定輸入輸出檔案
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
...                     default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
...                     default=sys.stdout)
>>> parser.parse_args(['input.txt', 'output.txt'])
Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,
        outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
        outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)      
  • #表示至少一個
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('foo', nargs='+')
>>> parser.parse_args(['a', 'b'])
Namespace(foo=['a', 'b'])
>>> parser.parse_args([])
usage: PROG [-h] foo [foo ...]
PROG: error: the following arguments are required:      
  • #表示任意個
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='*')
>>> parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])      
  • argparse.REMAINDER #搜集剩餘的參數
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo')
>>> parser.add_argument('command')
>>> parser.add_argument('args', nargs=argparse.REMAINDER)
>>> print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')      
  • const #常量
  • default #預設值
  • type #接受參數轉換為的類型
  • choices #參數容許值的容器
  • required #是否省略指令行選項
  • help #幫助文檔中對這個參數的描述
  • metavar #使用消息中參數的名稱
  • dest #定義parse_args() 解析參數後傳回對象的屬性名稱
  1. 簡單示例添加一個參數
import argparse
#定義參數解析器
parse = argparse.ArgumentParser(prog='ls',add_help=True,description="ls 檢視檔案目錄")
#為解析器添加可識别參數
parse.add_argument("path") #添加一個位置參數
#args = parse.parse_args() #分析參數
args = parse.parse_args(["/abcd"]) 
#列印解析的參數
print(args.path)      

執行結果為:

2. 如果需要path可有接受多個參數。如下定義:

import argparse
#定義參數解析器
parse = argparse.ArgumentParser(prog='ls',add_help=True,description="ls 檢視檔案目錄")
#為解析器添加可識别參數
parse.add_argument("path",nargs="+") #至少接受一個位置參數
#args = parse.parse_args() #分析參數
args = parse.parse_args("./ ./abc".split()) 
#列印解析的參數
print(args.path)      

執行結果如下:

parse.add_argument("path",default="./")      
  1. 添加選項參數
import argparse
import argparse
parse = argparse.ArgumentParser(prog="ls",add_help=False) #不添加-h參數
parse.add_argument("-h","--help",action="store_true") #添加-h參數,當出現-h時,-h值為True,否則為FAalse
parse.add_argument("-g","--Good",action="store_false",dest="good") #當設定dest屬性值時,擷取的值會映射到屬性dest所指向的名稱上。
args = parse.parse_args("")
print(args.help,args.good)