自定義python命令(python命令列之argparser)
目錄
1、argparser.ArgumentParser([,description])
2、ArgumentParser.add_argument():
4、optional之short options :我看的論文裡面用的這個
python中使用命令列選項:
例如我們需要一個convert.py指令碼。它的作用是處理一個檔案,並將處理後的結果輸出到另一個檔案中。
要求該指令碼滿足以下條件:
1.通過-i -o選項來區別引數是輸入檔案還是輸出檔案:
>>> python convert.py -i inputfile -o outputfile
2.當不知道convert.py需要哪些引數時,用-h打印出幫助資訊
>>> python convert.py -h
如何在命令列執行python指令碼,並且執行時新增一些指定的引數
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, help][, dest])
1、argparser.ArgumentParser([,description])
表示的意思是: 建立ArgumentParser物件
檔名:args_test.py 內容如下:
import argparse parser = argparse.ArgumentParser(description='我就是練習一下') args = parser.parse_args()
執行一下:
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py -h usage: args_test.py [-h] 我就是練習一下 optional arguments: -h, --help show this help message and exit (tf1.8)
[email protected]:~/PycharmProjects$注意: 在description中可以填寫python檔案的功能的一些描述。
2、ArgumentParser.add_argument():
表示的意思是:呼叫add_argument()向ArgumentParser物件新增命令列引數資訊,這些資訊告訴ArgumentParser物件如何處理命令列引數。
- name or flags :引數的名稱,有必帶(positional)必選引數,和可選(optional)的引數。
3、args = parser.parse_args():
表示的意思是:通過呼叫parse_args()來解析ArgumentParser物件中儲存的命令列引數:將命令列引數解析成相應的資料型別並採取相應的動作,它返回一個Namespace
物件。
(1)positional引數示例:檔名:args_test.py
import argparse parser = argparse.ArgumentParser(description='將輸入的字串的首字母變成大寫') parser.add_argument('capital', help='將首字母大寫') #就是這個capital args = parser.parse_args() print(args.capital.capitalize()) print(type(args.capital))
執行下:
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py -h usage: args_test.py [-h] capital 將輸入的字串的首字母變成大寫 positional arguments: capital 將首字母大寫 optional arguments: -h, --help show this help message and exit
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py zhang Zhang <class 'str'>
解釋:python去執行python檔案時,帶的引數(zhang)儲存在了parser.parse_args().capital中,並且預設將引數處理成str型別
(2)optional可選引數示例:檔名:args_test.py
import argparse parser = argparse.ArgumentParser(description='log級別') parser.add_argument('--log_level', help='show the level of the log') #就是這個的--log_level args = parser.parse_args() print(args.log_level) print(type(args.log_level))
執行下:
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py --h usage: args_test.py [-h] [--log_level LOG_LEVEL] log級別 optional arguments: -h, --help show this help message and exit --log_level LOG_LEVEL show the level of the log
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py 1.0.0 usage: args_test.py [-h] [--log_level LOG_LEVEL] args_test.py: error: unrecognized arguments: 1.0.0 (tf1.8) [email protected]:~/PycharmProjects$
上面這個沒有新增名稱
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py -log_level 1.0.0 usage: args_test.py [-h] [--log_level LOG_LEVEL] args_test.py: error: unrecognized arguments: -log_level 1.0.0
上面這個名稱新增的不多
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py --log_level 1.0.0 1.0.0 <class 'str'>
解釋:在定義optional引數時,需要用–識別,且在使用引數執行python指令碼時,需要新增引數的具體名稱,且預設型別也是str
4、optional之short options :我看的論文裡面用的這個
optional引數由於在使用時需要寫引數名稱,可以用簡短的命令來代替:
import argparse parser = argparse.ArgumentParser(description='log級別') parser.add_argument('-l', '--log_level', help='show the level of the log') args = parser.parse_args() print(args.log_level) print(type(args.log_level))
執行下:
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py --h usage: args_test.py [-h] [-l LOG_LEVEL] log級別 optional arguments: -h, --help show this help message and exit -l LOG_LEVEL, --log_level LOG_LEVEL show the level of the log
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py --l 1.0.1 1.0.1 <class 'str'>
5、nargs
nargs=N(N是int型別),nargs=’*’, nargs=’?’
某個引數接受的值,nargs定義了值的個數,加了nargs後,接受的值會變成一個list,’?’代表一個值,’*’代表一個或多個值,舉例:
無nargs
import argparse parser = argparse.ArgumentParser() parser.add_argument('capital', default='hello', help='將首字母大寫') args = parser.parse_args() print(args) print(args.capital)
執行下:
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py a Namespace(capital='a') a
加入nargs,並執行:
import argparse parser = argparse.ArgumentParser() parser.add_argument('capital', default='hello', nargs=1, help='將首字母大寫') args = parser.parse_args() print(args) print(args.capital)
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py a Namespace(capital=['a']) ['a']
6、default 使用場景:
一些positional或所有的optional引數沒有用到時,可以用default來傳入預設值,使用方法:
看下沒有指定default引數時,optional引數的值:
import argparse parser = argparse.ArgumentParser(description='看看default怎麼用的') parser.add_argument('capital', help='將首字母大寫', default='hello', nargs='?') parser.add_argument('-l', '--log_level', default='INFO', help='show the level of the log') args = parser.parse_args() print(args) print(args.capital.capitalize()) print(args.log_level)
執行下:
(tf1.8) [email protected]:~/PycharmProjects$ python args_test.py Namespace(capital='hello', log_level='INFO') Hello INFO
解釋:注意positional的引數,加了nargs=’?’(或者加nargs=’*’也可以)。
7、action
這個引數炒雞好用,是針對optional的引數。對positional引數沒啥卵用。一言以概之,命令列中存在某個optional引數時,這個引數的值就為True(或False或常量或其他值),沒有出現這個引數時,值就為False(或True或None)
action有好幾種,簡單看一下這幾個方法
- store_true
- store_false
- count
- store_const
import argparse parser = argparse.ArgumentParser(description='看看nargs怎麼用的') parser.add_argument('--capital', action='store_true', help='看看store_true') parser.add_argument('-v', '-verbose', action='count', help='看看count') parser.add_argument('--val', action='store_const', const=20, help='看看store_const') args = parser.parse_args() print(args)
執行下:
[email protected]:~/PycharmProjects$ python args_test.py Namespace(capital=False, v=None, val=None)
8、灰常好用的count
dest定義了parse_args()中儲存命令列中值的引數名,對於positional的引數,引數名取的是add_argument()中的第一個,一般也不需要有多個,因為在使用命令列時,positional型別的引數名是不出現在命令列中的; 對於optional型別的引數更有意義些,為書寫方便,一個引數可以有多個引數名,比如上面的-l就是一個很好的示例
parser.add_argument('-l', '--log_level', help='show the level of the log')
選擇引數名的規則:long option>short option,(long option的標誌是–,short option的標誌是-)。若只有short option或只有long option或有多個long option,則選擇add_argument()中位置靠前的那一個,示例如下:
import argparse parser = argparse.ArgumentParser() parser.add_argument('-f', '--foo-bar', '--fooooooo') parser.add_argument('-x', '-y') args = parser.parse_args() print(args)
執行下
[email protected]:~/PycharmProjects$ python args_test.py -f 1 -x 2 Namespace(foo_bar='1', x='2')
:
參考 : https://blog.csdn.net/u013946404/article/details/78188266#4argumentparser%E5%AF%B9%E8%B1%A1(重要詳細看引數說明後面的)
https://blog.csdn.net/u010895119/article/details/78960740
https://blog.csdn.net/u010895119/article/details/78960740
https://blog.csdn.net/abc13526222160/article/details/84583800