[ TOC]
コマンドラインパラメータ入力を実現するには、いくつかの方法があります。
#! /usr/bin/python
# 機能:スクリプトプログラミングcmdパラメータ入力を実現
import sys
# 方法1sysモジュール法#
print('パラメータの数は',len(sys.argv),'パラメーター')print('リストパラメータリスト',str(sys.argv),"\n計算結果:",end="")
add =0for value in sys.argv:if value == sys.argv[0]:
pass
else:
add +=int(value)print(add)if __name__ =='__main__':
# 学ぶ価値がある
try:
argv1 = sys.argv[1]
argv2 = sys.argv[2]
except Exception as e:print("[*] Error:"+str(e))
sys.exit()main(sys.argv[1:]) #パラメータをメイン関数に渡します
WeiyiGeek.sys.argv
Pythonは、コマンドラインパラメータを取得するためのgetoptモジュールを提供します(パラメータ名を指定してください)
getoptモジュールは、コマンドラインパラメータの処理に特化したモジュールです。コマンドラインオプションとパラメータ、つまりsys.argvを取得するために使用されます。コマンドラインオプションは、プログラムパラメータをより柔軟にし、ショートオプションモード(-)とロングオプションモード(–)をサポートします。 。
文法:
getopt.getopt(args, options[, long_options]) #cmdパラメーターのバインド
getopt.gnu_getopt
getopt.GetoptError #例外がスローされました(この例外は、パラメーターリストが見つからない場合、またはオプションの必須パラメーターが空の場合にトリガーされます)- args:解析するコマンドラインパラメータのリスト。
- options:文字列形式で定義され、オプションの後にコロン(:)オプションに追加のパラメーターが必要であることを示します。コロンがない場合、オプションには追加のパラメーターがありません。
- long_options:リストの形式で定義され、長い_オプションの後の等号(=)このオプションが設定されている場合、追加のパラメーターが必要であることを示します。そうでない場合、追加のパラメーターはありません。
- このメソッドの戻り値は、2つの要素で構成されています:最初は(option, value)タプルのリスト。 2つ目は、パラメータリストに含まれていないものが含まれていることです。'-'または'--'パラメーター。
ケース:そのようなスクリプトを作成すると、コマンドラインを介して2つのファイル名をスクリプトファイルに渡すことができ、別のオプションを介してスクリプトの使用法を表示できます。
"""
ファイルコマンドラインパラメータの説明
"""
import sys, getopt
def main(argv):
inputfile =''
outputfile =''try:
opts, args = getopt.getopt(argv,"hi:o:",['help',"ifile=","ofile="]) #属性に注意してください(パラメータはバインドされたプロパティに属します),パラメータのリストを返す
except getopt.GetoptError:print('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)for opt, arg in opts:if opt =='-h' or opt =='--help':print('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in("-i","--ifile"):
inputfile = arg
elif opt in("-o","--ofile"):
outputfile = arg
print('入力ファイルは次のとおりです。', inputfile) #割り当て
print('出力ファイルは次のとおりです。', outputfile)if __name__ =="__main__":main(sys.argv[1:]) #これも重要なポイントです(スクリプトファイル自体を除外する)
WeiyiGeek.getopt
説明:argparseモジュールは、コマンドラインオプション、パラメーター、およびサブコマンドのパーサーとして使用されます
基本的な文法:
# パーサーを作成する,ArgumentParserオブジェクトは、コマンドラインをPythonデータタイプに変換するために必要なすべての情報を保持します。
parser = argparse.ArgumentParser(description='Process some integers.',prog='TestArgumentDemo')-prog:プログラム名(デフォルト:sys.argv[0])- usage :プログラムの使用法を説明する文字列(デフォルト值:生成されたfromargumentsがパーサーに追加されます)
# 単一のコマンドラインパラメータを解析する方法を定義します
ArgumentParser.add_argument(name or flags...[, action][, nargs][,const][,default][, type][, choices][, required][, help][, metavar][, dest])
# パラメータ分析:
- name:パラメータ名または次のようなオプション文字列のリストを指定します。:'-i','--ip'- action :コマンドラインでこのパラメータが検出されたときに実行される基本的なアクションのタイプ
- ' store'-パラメータNamespaceの値のみを保存します(foo='1')-'store_const'-constパラメータ名で指定された定数値を格納します,const=42Namespace(foo=42)-'store_true' and 'store_false'-はい'store_const'True値とFalse値をそれぞれ保存するための特別なケース,Namespace(foo=True, bar=False, baz=True)-'append'-リストを保存し、各パラメーター値をリストに追加します。ネームスペース(foo=['1','2'])-'append_const'-リストと各パラメータ値を格納します(定数値)リストに追加,Namespace(types=[<class'str'>,<class'int'>])-'count'-キーワードパラメータの出現回数をカウントします。
- version-通話で使用されたバージョン=キーワードパラメータ、バージョン情報の出力、呼び出し時に終了,action='version', version='%(prog)s 2.PROG2として0.0 , %(prog)progを定義するのはArgumentParserにあります='PROG
- nargs :使用する必要のあるコマンドラインパラメータの数(パラメータコマンドラインの後に入力パラメータの数を指定します)- nargs=2入力パラメータの数を指定し、その後に指定したパラメータを指定します
- nargs=argparse.REMAINDER残りのすべてのコマンドラインパラメータがリストに収集されます
- const:一部のconstおよびnargsは、必要な定数を選択します。
- default:デフォルト値
- type :コマンドラインパラメータを変換する必要があるタイプ,str / int / float
- type=argparse.FileType('r')/ type=argparse.FileType('w')nargsと一緒に使用すると、オプションの入力ファイルと出力ファイルを使用できます
- dest :解析によって追加されます_args()返されたオブジェクトの属性の名前。
- metavar:メッセージ内のパラメーターの名前を使用して、ArgumentParserがヘルプメッセージを生成するときに、予期される各パラメーターを参照するための何らかの方法が必要です。
- デフォルトでは、ArgumentParserオブジェクトは各オブジェクトの「名前」としてdestvalueを使用します。
- デフォルトでは、位置パラメータ操作の場合、dest値が直接使用され、オプションのパラメータ操作の場合、dest値は大文字になります。
- choices :オプション-パラメータに許可された値のコンテナ。
- 一部のコマンドラインパラメータは、制限された値、選択肢のセットから選択する必要があります=['rock','paper','scissors']),choices=range(1,4))- required :コマンドラインオプションを省略することは可能ですか?(オプションのみ/しなければならないかどうか)。
- True / False
- ヘルプ:コマンドパラメータの簡単な説明
実際のケース:
#! /usr/bin/env python
# coding:utf-8
# 機能:ArgumentParserを理解し、使用する
import argparse
import os,sys
def main():
parser = argparse.ArgumentParser(description="""\
指定された入力パラメータを実装して、入力値を解析します
ArgparseモジュールのArgumentParserメソッドを使用してインスタンス化します
""", prog='TestArgumentDemo')
parser.add_argument('-i','--ip',dest="ip",type=str,help="""次のようなIPアドレスを入力してください:192.168.1.1""",required=True)
parser.add_argument('-u','--user',dest="User",type=str,help="接続されているサービスのユーザー名を指定します",required=True)
parser.add_argument('-p','--pass',dest="Pass",type=str,help="サービスに接続するためのユーザーパスワードを指定します",required=True)
parser.add_argument('-P','--port',dest="Port",type=str,help="指定されたサービスのデフォルトのポート:25",required=False,default='25')
parser.add_argument('-v','--version',action="version", version='%(prog)s 1.0') #argument.py 1.0
parser.add_argument('-n','--number',dest="Trynum",choices=[1,2,3,4],help="失敗した再試行の数",default=2,type=int) #argument.py 1.0
parser.add_argument('-m','--mutil',dest="Mutil",nargs=2,help="2つのデーモンPID値を指定します",required=True) #nargs=argparse.REMAINDER複数のパラメーター
# 位置パラメータ:ファイルパッケージを直接読み取るか、書き込みます
parser.add_argument('infile',nargs='?',type=argparse.FileType('r'),default=sys.stdin)
parser.add_argument('outfile',nargs='?',type=argparse.FileType('w+'),default=sys.stdout)
# metavarを使用して、代替名を指定できます。ArgumentParserがヘルプメッセージを生成すると、
parser.add_argument('--bar',metavar=['XXX','YYYY']) #予想される各パラメーターを参照する方法が必要です。
parser.add_argument('demo',metavar=['AAA','bbb']) #位置パラメータプロンプト
args = parser.parse_args()print("パラメータタイプ:",type(args),"\Nパラメータ分析オブジェクト:",args)
ip = args.ip
username = args.User
password = args.Pass
port =int(args.Port) #パラメータで指定された型はstrであるため、ここではintに変換されます。
trynum = args.Trynum #TestArgumentDemo: error: argument -n/--number: invalid choice:5(choose from1,2,3,4)
mutil = args.Mutil
print("IPアドレス:",ip)print("ユーザー名:",username)print("パスワード:",password)print("港:",port)print("再試行回数:",trynum)print("パラメータ名と複数のパラメータを指定します。",mutil)print("ファイルの読み取り:",end =" ")for each in args.infile:print(each)print("ファイルの書き込み:",args.outfile)print("Matavarの期待されるパラメータ:バー= ",args.bar," Demo = ",args.demo)print("バージョン情報:",end="\t")
os.system('argument.py -v')if __name__ =='__main__':main()
結果:
$argument.py -h
usage: TestArgumentDemo [-h]-i IP -u USER -p PASS [-P PORT][-v][-n {1,2,3,4}]-m MUTIL MUTIL [--bar ['XXX','YYYY']][infile][outfile]['AAA','bbb']
指定された入力パラメーターを実現して入力値を解析し、ArgparseモジュールのArgumentParserメソッドを使用してインスタンス化します
positional arguments:ロケーションパラメータ
infile
outfile
[' AAA','bbb']
optional arguments:オプションパラメータ
- h,--help show this help message and exit
- i IP,--ipIPなどのIPアドレスを入力してください:192.168.1.1-u USER,--user USERは、接続されたサービスのユーザー名を指定します
- p PASS,--pass PASSは、サービスに接続するためのユーザーパスワードを指定します
- P PORT,--port PORTサービスのポートを指定します。デフォルト:25-v,--version show program's version number and exit
- n {1,2,3,4},--number {1,2,3,4}
失敗した再試行の数
- m MUTIL MUTIL,--mutil MUTIL MUTIL
2つのデーモンPID値を指定します
- - bar ['XXX','YYYY']
$argument.py -i 192.168.1.1-u root -p 123456-P2222 -m 102420481.txt 2.txt AAAA --bar YYYY
パラメータタイプ:<class'argparse.Namespace'>
パラメータ分析オブジェクト:名前空間(Mutil=['1024','2048'], Pass='123456', Port='2222', Try
num=2, User='root', bar='YYYY', demo='AAAA', infile=<_io.TextIOWrapper name='1.t
xt' mode='r' encoding='cp936'>, ip='192.168.1.1', outfile=<_io.TextIOWrapper nam
e='2.txt' mode='w+' encoding='cp936'>)
IPアドレス:192.168.1.1
ユーザー名:root
パスワード:123456
ポート:2222
再試行回数:2
パラメータ名と複数のパラメータを指定します。['1024','2048']
ファイルの読み取り:Whoami-テキストコンテンツ
ファイルの書き込み:<_io.TextIOWrapper name='2.txt' mode='w+' encoding='cp936'>
Matavarの期待されるパラメータ:バー= YYYY Demo = AAAA
バージョン情報:TestArgumentDemo 1.0
Recommended Posts