Pythonスクリプト取得コマンドラインパラメータgetopt,gnu_getopt
8345 ワード
に質問
pythonスクリプトは、オプションおよび非オプションパラメータを含むコマンドラインパラメータを取得する方法です.たとえば、次のようにします.
関連モジュール
pythonはsysモジュール取得パラメータを提供し、getoptモジュールはパラメータを解析します. sys.argv:スクリプト名自体を含むコマンドラインパラメータ sys.Argv[0]:client.のようなスクリプト名自体py sys.argv[1:]:スクリプト名 を含まないコマンドラインパラメータ getopt.getopt():解析コマンドラインパラメータ getopt.gnu_getopt():コマンドラインパラメータを解析し、オプションと非オプションを混在させることができます getopt.Getopterror:コマンドラインパラメータを解析するときの例外名 getopt.error:getopt.Getopterrorの別称、下向き互換用 関数のプロトタイプと説明
getoptとgnu_getoptの原型は以下の通りである:getopt(args,options[,long_options])gnu_getopt(args,options[,long_options]) argsはパラメータリストであり、通常sysを用いる.argv[1:]は、myargv=['-t','60','127.0.0.1','8080'] のようなパラメータリストを独自に構築することもできる. optionsは、−h,−v,−p 80のような短いパラメータである. long_optionsは、help などの長いパラメータです.
関数呼び出しの説明
例として、次のような呼び出しがあります.「bht:」:1つのオプションがスイッチ状態(追加パラメータなし)を表す場合、分析列にはオプション文字のみが書き込まれます.選択したアイテムに追加パラメータが付いている場合、分析列にオプション文字を書き込み、「:」番号を付けます.だから「bht:」は「b」と「h」がスイッチオプションであることを表す.「t:」は、後にパラメータが付いていることを示します. getoptまたはgnuを呼び出すgetopt関数の場合、関数は2つのリストを返します:optsとargs.optsは解析されたフォーマット情報である.argsは、フォーマット情報に属さない残りのコマンドラインパラメータである.optsは2元グループのリストです.各要素は、(オプション列、追加パラメータ)です.追加パラメータがない場合は空白列'. 長いフォーマットを使用してシリアルリストを解析します:['help','timeout='].ロングフォーマット列にもスイッチ状態があります.すなわち、後ろに「=」番号が付いていません.等号が付いている場合は、後にパラメータがあることを示します.この例では、「help」はスイッチオプションです.「timeout=」は、後にパラメータが付いていることを示します. プロセス全体は、エラーを分析すると、使用方法情報を印刷して、ユーザにこのプログラムの使用方法を通知することができるように、例外を含むために使用される. プログラムを実行する場合、短いフォーマットの場合、「-」番号の後ろにオプションアルファベットが続きます.このオプションの追加パラメータがある場合は、スペースで区切ることも、区切らないこともできます.長さは任意で、引用符を使ってもいいです.以下は正しい:-o-oa-obbbb-o bbb-o'ccc'-o"a b" プログラムを実行する場合、長いフォーマットの場合、「--」番号の後ろに単語が付きます.オプションに追加のパラメータがある場合は、後に「=」に続いてパラメータを追加します.「=」番号の前後にスペースを付けることはできません.または、スペース区切りオプションと追加のパラメータを使用します.以下は正しいです.--timeout=30--timeout 30ですが、これらは正しくありません.--timeout=30--timeout=30--timeout=30--timeout=30--timeout=30--timeout=30--timeout 30 getoptとgnu_getoptの違いは、getoptが非オプションパラメータの後、すべてのパラメータが非オプションとして定義されることです.gnu_getoptは、client.py -t 30 127.0.0.1 8080 -b.gnu_getoptはpython 2.3から導入された. 長さオプションは、long_などの可能な限り長く識別されます.optionsが['foo','frob']の場合、--foは--fooに一致します.しかし--fは一致せず,GetoptError異常を放出した.
≪インスタンス|Instance|emdw≫
検証結果1
一般的な呼び出し方法
検証結果2
オプションと非オプションが混在するシーン
検証結果3
追加パラメータのない短いオプションを合わせて書くと、「-b-t」は「-bt」と書くことができます.
検証結果4
ショートオプションと追加パラメータを合わせて書く
検証結果5
短いオプションのみで、パラメータは追加されていません
検証結果6
長いオプションのみで、パラメータは追加されていません
検証結果7
--verマッチ--version
検証結果8
オプションの例外を認識できません
検証結果9
不要な追加パラメータの異常
検証結果10
文字が数値に変換できない例外
検証結果11
ロングオプションが短すぎて一致しない例外
pythonスクリプトは、オプションおよび非オプションパラメータを含むコマンドラインパラメータを取得する方法です.たとえば、次のようにします.
python client.py -b -t timeout host port
python client.py -h
python client.py --help
関連モジュール
pythonはsysモジュール取得パラメータを提供し、getoptモジュールはパラメータを解析します.
getoptとgnu_getoptの原型は以下の通りである:getopt(args,options[,long_options])gnu_getopt(args,options[,long_options])
関数呼び出しの説明
例として、次のような呼び出しがあります.
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], "bht:", ['help','timeout='])
except getopt.GetoptError as e:
print e
sys.exit()
≪インスタンス|Instance|emdw≫
#!/usr/bin/env python
import sys, getopt
timeout = -1
TS = 0
bandwidth = 0
def usage():
print("Usage: %s [OPTION]... [hostname] [port]" % (sys.argv[0]))
print(" -b display bandwidth in bytes")
print(" -h, --help print this help and exit")
print(" -t, --timeout time connection timeout")
print(" --timestamp display timestamp")
print(" -v, --version print version information and exit")
print("sys.argv=|%s|" % sys.argv)
try:
opts, args = getopt.gnu_getopt(sys.argv[1:], "bht:v", ['help','timeout=','version',"timestamp"])
print("opts=|%s|" % opts)
print("args=|%s|" % args)
except getopt.GetoptError as e:
print e
usage()
sys.exit()
for op, value in opts:
if op == "-b":
bandwidth = 1
if op == "-h" or op == "--help":
usage()
sys.exit()
if op in ("-t","--timeout"):
timeout = value
if op == "--timestamp":
TS = 1
if op in ("-v","--version"):
print("%s version: 0.0.1" % sys.argv[0])
sys.exit()
if len(args) != 2:
print("no host or port")
usage()
sys.exit()
host=args[0]
try:
port = int(args[1])
except ValueError as e:
print e
usage()
sys.exit()
print("timeout=%s, host=%s, port=%d, bandwidth=%d, TS=%d" % (timeout, host, port, bandwidth, TS))
検証結果1
一般的な呼び出し方法
# python client.py -t 30 -b 127.0.0.1 8080
sys.argv=|['client.py', '-t', '30', '-b', '127.0.0.1', '8080']|
opts=|[('-t', '30'), ('-b', '')]|
args=|['127.0.0.1', '8080']|
timeout=30, host=127.0.0.1, port=8080, bandwidth=1, TS=0
検証結果2
オプションと非オプションが混在するシーン
# python client.py -t 30 127.0.0.1 8080 -b
sys.argv=|['client.py', '-t', '30', '127.0.0.1', '8080', '-b']|
opts=|[('-t', '30'), ('-b', '')]|
args=|['127.0.0.1', '8080']|
timeout=30, host=127.0.0.1, port=8080, bandwidth=1, TS=0
検証結果3
追加パラメータのない短いオプションを合わせて書くと、「-b-t」は「-bt」と書くことができます.
# python client.py -bt 30 127.0.0.1 8080
sys.argv=|['client.py', '-bt', '30', '127.0.0.1', '8080']|
opts=|[('-b', ''), ('-t', '30')]|
args=|['127.0.0.1', '8080']|
timeout=30, host=127.0.0.1, port=8080, bandwidth=1, TS=0
[root@test python]#
検証結果4
ショートオプションと追加パラメータを合わせて書く
# python client.py -bt30 127.0.0.1 8080
sys.argv=|['client.py', '-bt30', '127.0.0.1', '8080']|
opts=|[('-b', ''), ('-t', '30')]|
args=|['127.0.0.1', '8080']|
timeout=30, host=127.0.0.1, port=8080, bandwidth=1, TS=0
検証結果5
短いオプションのみで、パラメータは追加されていません
# python client.py -v
sys.argv=|['client.py', '-v']|
opts=|[('-v', '')]|
args=|[]|
client.py version: 0.0.1
検証結果6
長いオプションのみで、パラメータは追加されていません
# python client.py --version
sys.argv=|['client.py', '--version']|
opts=|[('--version', '')]|
args=|[]|
client.py version: 0.0.1
検証結果7
--verマッチ--version
# python client.py --ver
sys.argv=|['client.py', '--ver']|
opts=|[('--version', '')]|
args=|[]|
client.py version: 0.0.1
検証結果8
オプションの例外を認識できません
# python client.py -i
sys.argv=|['client.py', '-i']|
option -i not recognized
Usage: client.py [OPTION]... [hostname] [port]
-b display bandwidth in bytes
-h, --help print this help and exit
-t, --timeout time connection timeout
--timestamp display timestamp
-v, --version print version information and exit
検証結果9
不要な追加パラメータの異常
# python client.py -t
sys.argv=|['client.py', '-t']|
option -t requires argument
Usage: client.py [OPTION]... [hostname] [port]
-b display bandwidth in bytes
-h, --help print this help and exit
-t, --timeout time connection timeout
--timestamp display timestamp
-v, --version print version information and exit
検証結果10
文字が数値に変換できない例外
# python client.py 127.0.0.1 8080abc
sys.argv=|['client.py', '127.0.0.1', '8080abc']|
opts=|[]|
args=|['127.0.0.1', '8080abc']|
invalid literal for int() with base 10: '8080abc'
Usage: client.py [OPTION]... [hostname] [port]
-b display bandwidth in bytes
-h, --help print this help and exit
-t, --timeout time connection timeout
--timestamp display timestamp
-v, --version print version information and exit
検証結果11
ロングオプションが短すぎて一致しない例外
# python client.py --time 127.0.0.1 8080
sys.argv=|['client.py', '--time', '127.0.0.1', '8080']|
option --time not a unique prefix
Usage: client.py [OPTION]... [hostname] [port]
-b display bandwidth in bytes
-h, --help print this help and exit
-t, --timeout time connection timeout
--timestamp display timestamp
-v, --version print version information and exit