1. 程式人生 > >自定義python命令(python命令列之argparser)

自定義python命令(python命令列之argparser)

目錄

1、argparser.ArgumentParser([,description])

2、ArgumentParser.add_argument():

3、args = parser.parse_args():

4、optional之short options :我看的論文裡面用的這個

5、nargs 

6、default 使用場景:

7、action 

8、灰常好用的count



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