Python中的命令列解析工具介紹
++++++++++++++++++++++
sys.argv
最簡單、最原始的方法就是手動解析了。
import sys
defTestSys():
for arg in sys.argv[1:]:
print(arg)
getopt
getopt模組是原來的命令列選項解析器,支援UNIX函式getopt()建立的約定。它會解析一個引數序列,如sys.argv,並返回一個元祖序列和一個非選項引數序列。目前支援的選項語法包括短格式和長格式選項:-a
,-bval
, -b
val
, --noarg
, --witharg=val
, --witharg
val
try:
options, remainder = getopt.getopt(sys.argv[1:],'o:v',['output=','verbose','version=',])
except getopt.GetoptErroras err:
print'ERROR:', err
sys.exit(1)
簡單說明,如果某個單字元選項需要引數,在他後面加冒號;對於長格式選項,要加等號。如果getopt在輸入引數中遇到了'--',解析會停止。
argparse
optparse was deprecated since version 2.7 and will not be developed further; development will continue with the argparse module.
argparse是python標準庫中的模組,以前的optparse已經廢棄。利用argparse,可以完成對命令列的引數定義、解析以及後續的處理。一個很簡單的例子如下(檔名prog.py,這個例子其實什麼也不做):
import argparse
parser = argparse.ArgumentParser(description="some information here")
args = parser.parse_args()
這樣,prog.py就能解析命令列引數了,按照如下方式執行,結果如下:
$ python prog.py
$ python prog.py --help
usage
optional arguments:
-h,--help show this help message andexit
$ python prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments:--verbose
$ python prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
其實ArgumentParser函式有很多可選引數,prog、usage、description、epilog分別定義解析器的名稱、使用說明、描述、最後的結尾描述。使用parents
表示共享同一個父類解析器(這樣就可以共享父類解析器的引數),而這個父類解析器通常是如下定義:
parent_parser = argparse.ArgumentParser(add_help=False)
此外,formatter_class
定義description的顯示格式,取值可以是如下三種,具體示例參見此處:
- RawDescriptionHelpFormatter,
- RawTextHelpFormatter
- ArgumentDefaultsHelpFormatter
其它還有很多引數,此處就不一一列舉了。
增加引數
ArgumentParser.add_argument(name or flags...[, action][, nargs][,const][,default][, type][, choices][, required][, help][, metavar][, dest])
每個引數解釋如下:
name or flags - 引數的名字.
action - 遇到引數時的動作,預設值是store。store_const,表示賦值為const;append,將遇到的值儲存成列表,也就是如果引數重複則會儲存多個值; append_const,將引數規範中定義的一個值儲存到一個列表;count,儲存遇到的次數;此外,也可以繼承argparse.Action自定義引數解析;
nargs - 引數的個數,可以是具體的數字,或者是?號,當不指定值時對於Positional argument使用default,對於Optional argument使用const;或者是*號,表示0或多個引數;或者是+號表示1或多個引數.
const - action和nargs所需要的常量值.
default - 不指定引數時的預設值.
type - 引數的型別.
choices - 引數允許的值.
required - 可選引數是否可以省略(僅針對optionals).
help - 引數的幫助資訊,當指定為argparse.SUPPRESS
時表示不顯示該引數的幫助資訊.
metavar - 在usage說明中的引數名稱,對於必選引數預設就是引數名稱,對於可選引數預設是全大寫的引數名稱.
dest - 解析後的引數名稱,預設情況下,對於可選引數選取最長的名稱,中劃線轉換為下劃線.
一些示例:
# 引數名稱為echo
parser.add_argument("echo", help="echo the string you use here")
# 可以增加型別
parser.add_argument("square", help="display a square of a given number",
type=int)
# 可選引數前面多了--符號,-v是簡寫形式,store_true說明碰到該引數時儲存為true,否則就是false
parser.add_argument("-v","--verbose", help="increase output verbosity",
action="store_true")
# 當然,也可以這樣寫,規定了可選引數的型別和取值範圍
parser.add_argument("-v","--verbosity", type=int, choices=[0,1,2],
help="increase output verbosity")
# count表示遇到該引數幾次,值就加幾,預設值是0
parser.add_argument("-v","--verbosity", action="count",default=0,
help="increase output verbosity")
增加互斥型別的引數:
group= parser.add_mutually_exclusive_group()
group.add_argument("-v","--verbose", action="store_true")
group.add_argument("-q","--quiet", action="store_true")
如果必選引數的值以-開頭,需要在輸入命令時特殊處理:
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('foo', nargs='?')
>>> parser.parse_args(['--','-f'])
Namespace(foo='-f')
Sub-commands
將多個命令組合進一個程式中,使用子解析器來處理命令列的每個部分。就像svn,以及OpenStack各個元件那樣。
ArgumentParser.add_subparsers([title][, description][, prog][, parser_class][, action][, option_string][, dest][, help][, metavar])
>>># create the top-level parser
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo', action='store_true', help='foo help')
>>> subparsers = parser.add_subparsers(help='sub-command help')
>>>
>>># create the parser for the "a" command
>>> parser_a = subparsers.add_parser('a', help='a help')
>>> parser_a.add_argument('bar', type=int, help='bar help')
>>>
>>># create the parser for the "b" command
>>> parser_b = subparsers.add_parser('b', help='b help')
>>> parser_b.add_argument('--baz', choices='XYZ', help='baz help')
>>>
>>># parse some argument lists
>>> parser.parse_args(['a','12'])
Namespace(bar=12, foo=False)
>>> parser.parse_args(['--foo','b','--baz','Z'])
Namespace(baz='Z', foo=True)
Partial parsing
ArgumentParser.parse_known_args(args=None,namespace=None)
其實與parse_args()
類似,但當碰到多餘的引數時不丟擲錯誤,而是返回一個二元組。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('bar')
>>> parser.parse_known_args(['--foo','--badger','BAR','spam'])
(Namespace(bar='BAR', foo=True),['--badger','spam'])
對於argparse的高階使用,建議直接看一下OpenStack中Oslo元件的原始碼,會受益匪淺的。
docopt
docopt就比較強大了,它是根據你自己寫的help messages(文件描述),自動為你生成parser。使用之前需要下載相應的庫,這裡有個介面可以試用一下docopt的強大,借用官方的一個例子:
"""Usage: arguments_example.py [-vqrh] [FILE] ...
arguments_example.py (--left | --right) CORRECTION FILE
Process FILE and optionally apply correction to either left-hand side or
right-hand side.
Arguments:
FILE optional input file
CORRECTION correction angle, needs FILE, --left or --right to be present
Options:
-h --help
-v verbose mode
-q quiet mode
-r make report
--left use left-hand side
--right use right-hand side
"""
from docopt import docopt
if __name__ =='__main__':
arguments = docopt(__doc__)
print(arguments)
文件描述有兩個部分:
轉自新浪微博:@孔令賢HW;
++++++++++++++++++++++
sys.argv
最簡單、最原始的方法就是手動解析了。
import sysdefTestSys():for arg in sys.argv[1:]:print(arg)
getopt
今天學習python的argparse模組。看到了這樣一篇文章,連結 http://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.html,題目是Python 命令列解析工具 Argparse介紹(一),翻譯自pyt
parser = argparse.ArgumentParser() #建立物件
parser.add_argument("file") #新增引數
parser.add_
# -*- coding: utf-8 -*-
import argparse
args = "-f hello.txt -n 1 2 3 -x 100 -y b -z a -q hello @args.txt i_am_bar -h".split()
# 使用
Apache Commons CLI 是 Apache 下面的一個解析命令列輸入的工具包,該工具包還提供了自動生成輸出幫助文件的功能。
Apache Commons CLI 支援多種輸入引數格式,主要支援的格式有以下幾種:
POSIX(Portable Operating
python實現指令碼命令列的庫有:
內建庫sys
內建庫argparse
第三方庫click
第三方庫fire
內建庫sys
sys.argv 包含命令列引數列表,第一個引數是檔名
sys_demo.py
import sys
d
常用的python命令列解析庫,這兒介紹3種:
1.argparse
2.click
3.fire
argparse是python自帶的模組,要經歷解析器初始化、引數定義、解析一套流程,使用起來有些繁瑣。
一篇argparse使用的文章:https://ww
1、argparse
argparse是python自帶的模組,要經歷解析器初始化、引數定義、解析一套流程,使用起來有些繁瑣。
argpase的使用:
class Calculator(object):
"""
計算器
"""
argparse是Python內建的一個用於命令項選項與引數解析的模組,在編寫指令碼的過程中是非常常用的。
在其使用中主要包含三個步驟:
import argparse
parser = argparse.ArgumentParser(descripti
與命令列相關的 Python 語言
使用 sys.argv 獲取命令列引數
import sys
print(sys.argv)
使用 sys.stdin 和 fileinput 讀取標準輸入
import sys
for line in sys.stdin:
設定一個解析器
使用argparse的第一步就是建立一個解析器物件,並告訴它將會有些什麼引數。那麼當你的程式執行時,該解析器就可以用於處理命令列引數。
解析器類是 ArgumentParser 。
主要是比較理解兩個函式:parse_args()和parse_known_args()
① parse_args()
import argparse
import sys
parse = arg
主要參考blog:
argparse模組是Python的命令列解析模組,可以很方便的進行引數的傳遞,而不需要修改原始碼。
argparse的使用主要有三步,建立解析物件,新增命令列引數,進行引數的解析
看程式碼和註釋:
import argparse
python命令列解析模組--argparse
目錄
簡介
詳解ArgumentParser方法
詳解add_argument方法
參考文件:
https://www.jianshu.com/p/aac9f8079a53
https://www
二話不說,直接上程式碼!
package cn.sigangjun.util;
/**
* <p>Title:java call linux shell util </p>
* <p>Description: java call
文章作者:Tyan
部落格:noahsnail.com | CSDN | 簡書
命令列引數解析在程式語言中基本都會碰到,Python中內建了一個用於命令項選項與引數解析的模組argparse。下面主要介紹兩種解析Python命令列引數的方式。
optparse是python用來解析命令列引數的,最早是getopt,option比getopt更強大和靈活。最新的命令列解析使用argparse,因此optparse今後將不會再被開發,optparse在python的原始碼位置是Lib/optparse
# -*- coding:utf-8 -*-
import os
command = 'ping www.baidu.com '#可以直接在命令列中執行的命令
r = os.popen(comman **前言**
本篇教程的目的是希望大家可以通讀完此篇之後,可以使用python製作一款符合自己需求的linux工具。
本教程使用的是google開源的python第三方庫:fire
無論是學生黨自己做著練手,還是工作中確有需求,本篇都儘可能通過簡單的例子來示範該第三方庫的用法,其中若有描述不當的地方 好的 cto turn 匿名 urn 這樣的 簡單介紹 對象 一個表 在學習python的過程中,lambda的語法經常出現,現在將它整理一下,以備日後查看。
1、lambda是什麽?
舉個例子如下:
1 func=lambda x:x+1
2 print(fu Usage
和
相關推薦
Python中的命令列解析工具介紹
Python 命令列解析工具 Argparse介紹(二)
python 命令列解析工具 argparse 基本使用
python的命令列解析argparse
Java命令列解析工具Apache CLI
Python程式設計:使用sys、argparse、click、fire實現命令列解析
常用的python命令列解析庫
python常用的命令列解析庫
Python命令列解析器argparse的使用
Python打造命令列工具
python-argparse命令列選項與引數解析
python命令列解析argparse模組
python命令列解析模組-argparse
python命令列解析模組--argparse
JAVA呼叫linux中的shell命令列的工具類
Python的命令列引數解析
深入理解python 命令列解析模組optparse(optparse原始碼解讀)
用Python獲取命令列輸出 將螢幕輸出的log儲存檔案中
python製作命令列工具——fire
Python中的lambda的簡單介紹