Python編寫帶選項的命令列程式

2021-08-15 09:15:01 字數 1481 閱讀 4242

執行python程式時,有時需要在命令列傳入一些引數。常見的方式是在執行時,在指令碼名後直接追加空格分隔的引數列表(例如 python test.py arg0 arg1 arg2),然後在指令碼中就可以通過sys.argv獲取所有的命令列引數。這種方式的優點是傳參方便,引數獲取簡單;缺點是執行指令碼時,必須知道引數的順序,並且不能設定預設值,所有引數每次都必須傳入。還有一種命令列傳參方式是通過帶選項的方式進行傳參(例如python test.py -p0=arg0 -p1=arg1)。這種方式的優點是引數不用按照固定的順序傳入,並且對於有預設值的引數,可以不傳引數直接使用預設值;缺點是傳入引數時需要額外加上選項。

對於帶選項的命令列引數,可以通過python自帶的getopt模組來進行解析。主要方法:

getopt(args, shortopts, longopts = ):解析命令列選項和引數列表。

args是不包括執行程式引用的引數列表,通常來說就是sys.args[1:]。

shortopts是指令碼要識別的短選項字母,如果短選項需要引數,需要在字母後加冒號「:」。

longopts是支援的長選項,是乙個長選項名稱的列表。選項名稱不包括「-」。需要引數的長選項,需要在後面加乙個等號「=」。

返回值包括兩個列表:第乙個列表中是(選項,值),如果選項沒有引數,值為空字串。第二個列表是剝離選項之後的程式引數列表。長項前用「--」,短項前用「-」。

另外要注意的是當進行命令列引數解析時,如果遇到了非選項的引數時,就會停止帶選項引數的解析。

#!/usr/bin/python

# -*- coding: gbk -*-

import sys

import getopt

def printusage():

print ('''usage: test.py -i -o test.py --in=--out=''')

def main():

inputarg=""

outputarg=""

try:

opts, args = getopt.getopt(sys.argv[1:],"hi:o:",["in=","out="])

except getopt.getopterror:

printusage()

sys.exit(-1)

for opt,arg in opts:

if opt == '-h':

printusage()

elif opt in ("-i", "--in"):

inputarg=arg

elif opt in ("-o","--out"):

outputarg=arg

print ('輸入:'+inputarg)

print ('輸出:'+outputarg)

print ('其他程式引數:'+",".join(args))

if __name__=="__main__":

main()

命令列選項

試題名稱 命令列選項 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式不用對它進行處理。在工具名字...

命令列選項

試題編號 201403 3 試題名稱 命令列選項 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 請你寫乙個命令列分析程式,用以分析給定的命令列裡包含哪些選項。每個命令列由若干個字串組成,它們之間恰好由乙個空格分隔。這些字串中的第乙個為該命令列工具的名字,由小寫字母組成,你的程式...

REAgentC 命令列選項

應用到 windows 7 reagentc.exe 除了可用於部署自定義 windows r 恢復環境 windows re 還可用於啟用映像恢復解決方案。可以在離線 windows 映像上或執行 windows 的作業系統上執行reagentc命令。如果使用 windows pe 2.x 在離線...