日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python命令行选项参数解析策略

發(fā)布時(shí)間:2025/3/20 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python命令行选项参数解析策略 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

在Python的項(xiàng)目開發(fā)過程中,我們有時(shí)需要為程序提供一些可以通過命令行進(jìn)行調(diào)用的接口。不過,并不是直接使用 command + 當(dāng)前文件 就ok的,我們需要對(duì)其設(shè)置可選的各種各樣的操作類型。所以,這種情況下我們就有必要對(duì)傳入的參數(shù)進(jìn)行解析操作。下面就此問題提出幾種不同的解決策略,希望于你有益。


版權(quán)說明

著作權(quán)歸作者所有。
商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
作者:Q-WHai
發(fā)表日期: 2016年3月18日
鏈接:http://blog.csdn.net/lemon_tree12138/article/details/50912898
來源:CSDN
更多內(nèi)容:分類 >> Thinking In Python


目錄

文章目錄

  • 概述
  • 版權(quán)說明
  • 目錄
    • @[toc]
  • 樸素字符串匹配方案
    • 分析
    • 優(yōu)點(diǎn)
    • 缺點(diǎn)
  • getopt模塊
    • 簡(jiǎn)介
    • 實(shí)戰(zhàn)用例
  • OptionParser模塊
    • 簡(jiǎn)介
      • parser.add_option()參數(shù)說明
    • 實(shí)戰(zhàn)用例
  • Ref
  • 征集

樸素字符串匹配方案

分析

其實(shí)此方法可以很直接地表達(dá)程序猿們?cè)谶壿嬤@條路走了多遠(yuǎn)。當(dāng)然,這并沒有包含任何的不敬。
這的確是一種方案,甚至可以說是一種算法。因?yàn)槠渲苯亓水?dāng),所以在程序開發(fā)初期,本人也是如此樂此不疲。除了完全的一個(gè)一個(gè)的命令之外,我們還可以對(duì)參數(shù)進(jìn)行json封裝,這樣就更加體貼了。
關(guān)于,這一點(diǎn)我想也不用多說什么的了。還是留一些時(shí)間給后面的兩種解決方案比較妥當(dāng)。不過還是可以說說此方案的優(yōu)點(diǎn)與缺點(diǎn)。

優(yōu)點(diǎn)

  • 針對(duì)不同的參數(shù)進(jìn)行不同的處理,針對(duì)性強(qiáng)
  • 缺點(diǎn)

  • 因?yàn)槠溽槍?duì)性太強(qiáng),所以其復(fù)用性太差

  • getopt模塊

    簡(jiǎn)介

    此模塊是python內(nèi)置的一個(gè)模塊。該模塊是專門用來處理命令行參數(shù)的。
    其基本使用格式如下:

    opts, args = getopt.getopt(args, shortopts, longopts = [])

    對(duì)于getopt()方法的第一個(gè)參數(shù),就是我們通過命令行傳入的參數(shù)。不過這里也有一個(gè)值得注意的地方,我需要對(duì)參數(shù)列表進(jìn)行切片處理。因?yàn)槲覀儷@得的第一個(gè)(args[0])命令行參數(shù)是當(dāng)前文件名稱,這并不是我們需要的。
    對(duì)于getopt()的第二個(gè)參數(shù),是shortopts;第三個(gè)參數(shù),是longopts
    shortopts比如:-h
    longopts比如:–help
    shortopts是以’-'為前綴的,longopts是以"- -"為前綴的.

    我們也可以單獨(dú)使用短參數(shù)。基本使用格式如下:

    opts, args = getopt.getopt(sys.argv[1:], "ld:")

    實(shí)戰(zhàn)用例

    from __init__ import *def usage():print 'prama_config.py usage:'print '-h, --help: Print help message.'print '-v, --version: Print script version'print '-o, --output: Input an output verb'print '-m, --message: Send a message to someone.'print '--foo: Test option 'print '--fre: Another test option'def version():print 'prama_config.py 1.0.1'def output(args):print 'Hello, %s' % argsdef message(sender, receiver, msg):print("{0} Send a message to {1}, content is \'{2}\'.".format(sender, receiver, msg))def main(argv):try:opts, args = getopt.getopt(argv[1:], 'hvom:', ['help=', 'message=', 'foo=', 'fre='])except getopt.GetoptError, err:print str(err)usage()sys.exit(2)for o, a in opts:if o in ('-h', '--help'):usage()sys.exit(1)elif o in ('-v', '--version'):version()sys.exit(0)elif o in ('-o', '--output'):output(a)sys.exit(0)elif o in ('-m', '--message'):message(a, args[0], args[1])sys.exit(0)else:print 'unhandled option'sys.exit(3)if __name__ == '__main__':main(sys.argv)

    OptionParser模塊

    簡(jiǎn)介

    前面說到getopt,不過getopt太小了,而且從代碼的角度看,面向過程的嫌疑很重。相對(duì)getopt,OptionParser就顯得比較專業(yè)級(jí)了。OptionParser通過*parser.add_option()添加選項(xiàng)參數(shù),再通過parser.parse_args()*進(jìn)行解析參數(shù)選項(xiàng)。整個(gè)過程很面向?qū)ο?/strong>
    對(duì)于OptionParser還有一個(gè)優(yōu)點(diǎn)在于,我們不需要為OptionParser設(shè)置help的選項(xiàng),help選項(xiàng)已經(jīng)被內(nèi)置到模塊當(dāng)中去了。

    parser.add_option()參數(shù)說明

  • action: action是parse_args() 方法的參數(shù)之一,它指示 optparse 當(dāng)解析到一個(gè)命令行參數(shù)時(shí)該如何處理。actions 有一組固定的值可供選擇,默認(rèn)是’store ‘,表示將命令行參數(shù)值保存在 options 對(duì)象里。action的取值有store, store_true, store_false三個(gè);
  • dest: dest是存儲(chǔ)的變量,命令行的執(zhí)行命令將會(huì)保存到dest指定的值當(dāng)中。比如,下面代碼中的-p命令,就會(huì)被保存到dest="pdcl"指定的options的pdcl變量中;
  • default: 用于設(shè)置上面dest中保存變量的默認(rèn)值。比如下面的代碼中,我們就將默認(rèn)值打成了False。那么,我們通過options.pdclp這個(gè)變量訪問到的值就是False;
  • type: 用于指定dest中保存變量值的數(shù)據(jù)類型。默認(rèn)的數(shù)據(jù)類型為string
  • help: 用于指定當(dāng)前命令的提示信息。
  • 實(shí)戰(zhàn)用例

    from optparse import OptionParserparser = OptionParser()parser.add_option("-p", "--pdbk",action="store_true", # 指示 optparse 當(dāng)解析到一個(gè)命令行參數(shù)時(shí)該如何處理dest="pdcl", # 存儲(chǔ)的變量default=False,help="write pdbk data to oracle db" )parser.add_option("-z", "--zdbk",action="store_true",dest="zdcl", # 存儲(chǔ)的變量default=False,help="write zdbk data to oracle db" )parser.add_option("-f", "--file", # 操作指令action="store",dest="filename", # 存儲(chǔ)的變量type="string", # 變量類型help="write report to FILE", # 顯示的幫助信息metavar="FILE" # 存儲(chǔ)變量的值 )parser.add_option("-q", "--quiet",action="store_false",dest="verbose",default=True,help="don't print status messages to stdout" )(options, args) = parser.parse_args()if options.pdcl is True:print 'pdcl is true' if options.zdcl is True:print 'zdcl is true' if options.filename is not None:print("filename={0}".format(options.filename))print(args)

    通過對(duì)上面三種參數(shù)解析策略的說明,可以看到這里使用OptionParser模塊進(jìn)行解析是最佳方式。


    Ref

    • http://blog.csdn.net/tianzhu123/article/details/7655499
    • http://blog.csdn.net/lwnylslwnyls/article/details/8199454
    • 《Python標(biāo)準(zhǔn)庫(kù)》

    征集

    如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請(qǐng)鏈接進(jìn)行注冊(cè):
    https://www.processon.com/i/56205c2ee4b0f6ed10838a6d

    總結(jié)

    以上是生活随笔為你收集整理的Python命令行选项参数解析策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。