sys.argv和getopt.getopt()的用法


1.sys.argv

Python中sys.argv是命令行參數從程序外部傳值的的一種途徑,它是一個列表,列表元素是我們想傳進去的的新參數,所以可以用索引sys.argv[]來獲得想要的值。因為一個寫好的程序一般封裝好了,直接在編輯軟件里運行就行了,但是程序里面的所有參數我們必須在程序里寫好。但是當我們想從程序外部向程序傳遞我們想要用的參數時,在不改動原來程序的基礎上,我們可應通過命令行參數,用dos界面運行程序,然后賦參,即向程序輸入新的參數,使程序運行。這里可以用到sys.argv,看個例子;

該程序名字為hello.py

a=sys.argv
print(a)
print(type(a))

因為是程序外部傳參,所以用dos界面運行文件。按win+R,輸入cmd,打開dos界面,首先進入自己程序所在的文件夾,我的放在

然后,進入文件輸入:Python hello.py Hello,按回車。注意,以空格鍵來分隔輸入值

可以看見運行結果,['hello.py', 'Hello']就是sys.argv的值,類型是一個list,分析一下值的組成,sys.argv[0]表示程序文件名,這是個默認值,sys.argv[1]就是我們從外部輸入的命令行參數。需要從外部輸入更多參數時,輸入值之間用空格分隔,如下:

2.geopt.getopt()

Python中getopt.getopt()這個函數是為了從外部輸入不同的命令行選項時,對應執行不同的功能。目前有短選項和長選項兩種格式。短選項格式為"-"加上單個字母選項;長選項為"--"加上一個單詞,同樣也是程序外部傳參。

語法:getopt.getopt(sys.argv,短選項,長選項)

返回值:函數返回兩個列表:opts和args。opts為分析出的格式信息。args為不屬於格式信息的剩余的命令行參數。opts是一個兩元組的列表。每個元素為:(選項串,附加參數)。如果沒有附加參數則為空串''。

下面摘抄自其他博客:getopt在Python中的使用

在dos界面中書輸入的選項的寫法要求
  對於短格式,"-"號后面要緊跟一個選項字母。如果還有此選項的附加參數,可以用空格分開,也可以不分開。長度任意,可以用引號。如以下是正確的:
-o
-oa
-obbbb
-o bbbb
-o "a b"
  對於長格式,"--"號后面要跟一個單詞。如果還有些選項的附加參數,后面要緊跟"=",再加上參數。"="號前后不能有空格。如以下是正確的:
--help=file1
  而這些是不正確的:
-- help=file1
--help =file1
--help = file1
--help= file1

如何用getopt進行分析
  使用getopt模塊分析命令行參數大體上分為三個步驟:

1.導入getopt, sys模塊
2.分析命令行參數
3.處理結果

  第一步很簡單,只需要:
import getopt, sys

  第二步處理方法如下(以Python手冊上的例子為例):
try:
    opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])#長短選項的功能相同,可以隨意選擇使用
except getopt.GetoptError:
    # print help information and exit:

1. 處理所使用的函數叫getopt(),因為是直接使用import導入的getopt模塊,所以要加上限定getopt才可以。
2. 使用sys.argv[1:]過濾掉第一個參數(它是執行腳本的名字,不應算作參數的一部分)。
3. 在函數里,使用短格式分析串"ho:"。當一個選項只是表示開關狀態時,即后面不帶附加參數時,在分析串中寫入選項字符。當選項后面是帶一個附加參數時,在分析串中寫入選項字符同時后面加一個":"號。所以"ho:"就表示"h"是一個開關選項;"o:"則表示后面應該帶一個參數。

函數中的'ho:'表示,在dos界面輸入短格式選項‘-h’,並且有附加參數,短選項的附加參數寫法如上要求

4. 在函數里,使用長格式,用一個列表包含幾個長選項:["help", "output="]。長格式串也可以有開關狀態,即后面不跟"="號。如果跟一個等號則表示后面還應有一個參數。這個長格式表示"help"是一個開關選項;"output="則表示后面應該帶一個參數。

函數中的["help", "output="],表示在dos界面輸入長格式串--help,不附加參數。--output,附加參數。
5. 調用getopt函數。函數返回兩個列表:opts和args。opts為分析出的格式信息。args為不屬於格式信息的剩余的命令行參數。opts是一個兩元組的列表。每個元素為:(選項串,附加參數)。如果沒有附加參數則為空串''。
6. 整個過程使用異常來包含,這樣當分析出錯時,就可以打印出使用信息來通知用戶如何使用這個程序。

  如上面解釋的一個命令行例子為:
'-h -o file --help --output=out file1 file2'

  在分析完成后,opts應該是:
[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

  而args則為:
['file1', 'file2']

  第三步主要是對分析出的參數進行判斷是否存在,然后再進一步處理。主要的處理模式為:
for o, a in opts:
    if o in ("-h", "--help"):
        usage()
        sys.exit()
    if o in ("-o", "--output"):
        output = a

  使用一個循環,每次從opts中取出一個兩元組,賦給兩個變量。o保存選項參數,a為附加參數。接着對取出的選項參數進行處理。(例子也采用手冊的例子)

 例子:文件名為sys_test2.py

 1 import getopt
 2 import sys
 3 
 4 opts,args = getopt.getopt(sys.argv[1:],'-h-f:-v',['help','filename=','version'])
 5 print(opts)
 6 for opt_name,opt_value in opts:
 7     if opt_name in ('-h','--help'):
 8         print("[*] Help info")
 9         sys.exit()
10     if opt_name in ('-v','--version'):
11         print("[*] Version is 0.01 ")
12         sys.exit()
13     if opt_name in ('-f','--filename'):#當外部輸入'-f1'或者'--flilename=1'時,輸出為:[('--filename', '3')] \n [*] Filename is  3
14         fileName = opt_value
15         print("[*] Filename is ",fileName)
16         # do something
17         sys.exit()

 結果

尤其要講的是函數返回值

程序中opts,args = getopt.getopt(sys.argv[1:],'-h-f:-v',['help','filename=','version'])
輸入的短選項-h本身就是不附帶參數的,長選項--filename可以附加參數,上例中附加值為3,可見這個返回值opts=[(('-h,''),('--filename','3'))]
其實這個函數就是為了根據相應的索引傳值,比如上面--filename對應傳的只就是3.


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM