[Python進階] Python命令行參數

Python 得到命令行參數的方法

須要模塊:sys
參數個數:len(sys.argv)
腳本名:    sys.argv[0]
參數1:     sys.argv[1]
參數2:     sys.argv[2]
python

解析命令行參數

Python提供了一個getopt模塊,可用於解析命令行選項和參數。函數

該模塊提供了兩個功能和異常,以啓用命令行參數解析。spa

getopt.getopt方法此方法解析命令行選項和參數列表。如下是此方法的簡單語法命令行

-getopt.getopt(args, options, [long_options])


Pythongetopt.GetoptError異常code

當在參數列表中有一個沒法識別的選項,或者當須要一個參數的選項不爲任何參數時,會引起這個異常。
異常的參數是一個字符串,指示錯誤的緣由。 屬性msg和opt給出錯誤消息和相關選項。字符串

import sys, getopt

def main(argv):
    inputfile = ''
    outputfile = ''

    try:
        opts, args = getopt.getopt(argv, "hi:o:g:", ['help', 'ifile=', "ofile="])
        # 長選項'='至關於短選項的':'
        print(opts)  # 打印參數與值 [('-i', 'in'), ('-o', 'out')]

    except getopt.GetoptError as e:
        print(e)
        sys.exit(-2)

    for opt, arg in opts:
        if opt in ('-h', '--help'):
            print('usage: command_line_usage.py -i <inputfile> -o <outputfile>')
            sys.exit()
        elif opt in ("-i", "--ifile"):
            inputfile = arg
        elif opt in ("-o", "--ofile"):
            outputfile = arg

    print('Input file is "', inputfile)
    print('Output file is "', outputfile)

if __name__ == "__main__":
    main(sys.argv[1:])  # 要處理的參數列表,sys.argv[0]爲腳本名,因此用sys.argv[1:]過濾掉腳本名。

代碼解釋:
a) sys.argv[1:]爲要處理的參數列表,sys.argv[0]爲腳本名,因此用sys.argv[1:]過濾掉腳本名。
b) "hi:o:": 當一個選項只是表示開關狀態時,即後面不帶附加參數時,在分析串中寫入選項字符。當選項後面是帶一個附加參數時,在分析串中寫入選項字符同時後面加一個":"號。因此"hi:o:"就表示"h"是一個開關選項;"i:"和"o:"則表示後面應該帶一個參數。
c) 調用getopt函數。函數返回兩個列表:opts和args。opts爲分析出的格式信息。args爲不屬於格式信息的剩餘的命令行參數。opts是一個兩元組的列表。每一個元素爲:(選項串,附加參數)。若是沒有附加參數則爲空串''。get

getopt函數的第三個參數[, long_options]爲可選的長選項參數,上面例子中的都爲短選項(如-i -o)
長選項格式舉例:input

  • --version
  • --file=error.txt

讓一個腳本同時支持短選項和長選項
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])it

D:\TestFPython>python 1_1_getopt.py -i in -o out
[('-i', 'in'), ('-o', 'out')]
Input file is " in
Output file is " out
相關文章
相關標籤/搜索