Python基礎知識 getopt

2021-08-11 12:37:58 字數 1958 閱讀 7877

sys 模組通過 sys.argv 屬性提供了對命令列引數的訪問。 命令列引數是呼叫某個程式時除程式名以外的其它引數。這樣命名是有歷史原因的,在乙個基於文字的環境裡(比如 unix 作業系統的 shell 環境或者 dos-shell ),這些引數和程式的檔名一同被輸入的。但在 ide 或者 gui 環境中可能就不會是這樣了, 大多 ide 環境都提供乙個用來輸入」命令列引數」的視窗;這些引數最後會像命令列上執行那樣被傳遞給程式。

熟悉 c 語言的讀者可能會問了, 「argc 哪去了?」 argc 和 argv 分別代表引數個數(argument count)和引數向量(argument vector)。argv 變數代表乙個從命令列上輸入的各個引數組成的字串陣列;argc 變數代表輸入的引數個數。在 python 中, argc 其實就是 sys.argv 列表的長度,而該列表的第一項 sys.argv[0] 永遠是程式的名稱。

在python中 處理命令列引數的模組有兩個:

1 getopt()

該模組是專門用來處理命令列引數的。

函式原型

getopt(args, shortopts, longopts =)
說明:

測試**:

#!/usr/bin/env python  # start line

# module doc

# imported modules

import sys,getopt

# variable definitions

# class definition

# function definition

# main program

defmain

(): proc_cmd_args()

defproc_cmd_args

():try:

options,args = getopt.getopt(sys.argv[1:],"hp:i:",["help","ip=","port="])

except getopt.getopterror:

sys.exit()

for name,value in options:

if name in ("-h","--help"):

usage()

if name in ("-i","--ip"):

print

'ip is----',value

if name in ("-p","--port"):

print

'port is----',value

if __name__ == '__main__':

main()

測試:

python

test.py

-i127.0.

0.1-

p805566

python

test.py

--ip=127.0

.0.1

--port=80

5566

執行效果:

ip is

---- 127.0.0.1

port

is---- 80

或者

ip is

---- 127.0.0.1

port

is---- 80

解釋說明:

返回值 options 是個包含元祖的列表,每個元祖是分析出來的格式資訊,比如 [(『-i』,』127.0.0.1』),(『-p』,』80』)] ;

args 是個列表,包含那些沒有『-』或『–』的引數,比如:[『55』,』66』]

注意:定義命令列引數時,要先定義帶』-『選項的引數,再定義沒有『-』的引數

2 關於optparse,請參考這篇文章《[python]使用optparse快速開發命令列解釋程式》

Python 基礎知識

來自 一 識別符號 1.python 中的識別符號是區分大小寫的。2.標示符以字母或下劃線開頭,可包括字母,下劃線和數字。3.以下劃線開頭的識別符號是有特殊意義的。以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from import 而匯入 以雙下劃線開頭的...

python基礎知識

一.隨機數的生成 都需要 import random 1.用於生成乙個指定範圍內的隨機浮點數。print random.uniform 10,20 print random.uniform 20,10 2.生成乙個指定範圍內的整數。下限必須小於上限制 print random.randint 12,...

python基礎知識

py基礎學習 1.命令列輸入python命令式,例如python test.py c m install sys.argv test.py c m install 2.切片,str 0 5 1 含頭不含尾,表示倒序切 3.unicode和encode unicode str,utf 8 將utf 8...