我在前幾天的文章中介紹了在shell中是如何通過引數名來傳遞引數值的。(shell - 通過引數名傳遞引數值)。今天繼續將這種場景延伸到python中。1. 背景
2. 看療效
順序傳遞引數值
引數: 看原始碼
呼叫: python test.py arg1 arg2 arg3
接受: sys.ar**[1], sys.ar**[2], …
引數名傳遞引數值
引數: python test.py --help
呼叫1: python test.py -a arg1 -b arg2
呼叫2: python test.py --a arg1 --b arg2
3. 實現
在python中實現引數名傳遞引數很簡單,python提供了更好的方式argparse模組中的argumentparser類。
下面是乙個簡單的栗子
from argparse import argumentparser
import sys
parser = argumentparser(
)parser.parse_args(sys.ar**[1:
])
在終端執行檔案加上–help或者-h引數,就可以獲得說明,是不是很酷!
d:\desktop>python argparselearn.py -
-help
usage: argparselearn.py [
-h]optional arguments:
-h,-
-help show this help message and exit
利用add_argument方法增加自定義引數
parser.add_argument(
'--foo'
,help
='foo help'
)parser.parse_args(
)
d:\desktop>python argparselearn.py -
-help
usage: argparselearn.py [
-h][
--foo foo]
optional arguments:
-h,-
-help show this help message and exit
--foo foo foo help
d:\desktop>python argparselearn.py -
-foo 3
到這裡,argumentparser最基本的用法我們已經掌握了。是不是很簡單~~
上乙個完整的實戰栗子吧
#coding=utf-8
import argparse
defparse_args()
:#print sys.ar**
iflen
(sys.ar**)
<2:
sys.exit(1)
param =
parser = argparse.argumentparser(
) parser.add_argument(
"-s"
,type
=str
) parser.add_argument(
"-t"
,type
=str
) parser.add_argument(
"-u"
,type
=str
) args = parser.parse_args(
)if args.s and args.u and args.t:
param[
"status"
]= args.s
param[
"username"
]= args.u
param[
"taskid"
]= args.t
else
: sys.exit(-1
)return param
if __name__ ==
'__main__'
: param = parse_args(
) print_str(
"start param: "
+str
(param)
)
4.擴充套件
argparse的使用可遠遠不止這些,比如可以設定預設引數、設定引數為必選項等很多好用的功能等待你繼續學習。(argparse模組使用)
linux shell指令碼通過引數名傳遞引數值
平常在寫shell指令碼都是用 1,2.這種方式來接收引數,然而這種接收引數的方式不但容易忘記且不易於理解和維護。linux常用的命令都可指定引數名和引數值,然而我們怎樣才能給自己的shell指令碼也採用引數名和引數值這樣的方式來獲取引數值呢?而不是通過 1,2這種方式進行獲取。下面的例子定義了短引...
linux shell指令碼通過引數名傳遞引數值
平常在寫shell指令碼都是用 1,2.這種方式來接收引數,然而這種接收引數的方式不但容易忘記且不易於理解和維護。linux常用的命令都可指定引數名和引數值,然而我們怎樣才能給自己的shell指令碼也採用引數名和引數值這樣的方式來獲取引數值呢?而不是通過 1,2這種方式進行獲取。下面的例子定義了短引...
python 引數傳遞 Python 引數傳遞
python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...