一般的に使用されるPython3スクリプトプログラミング.md

[ TOC]

0 x00Pythonコマンドラインパラメータ####

コマンドラインパラメータ入力を実現するには、いくつかの方法があります。

sys.argv
#! /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

getopt

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

説明: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

一般的に使用されるPython3スクリプトプログラミング.md
一般的に使用されるPython3インターフェイスの開発.md
Pythonネットワークプログラミング
12.Python3でのネットワークプログラミング
詳細なPythonIOプログラミング
PythonGUIインターフェイスプログラミング
Python機能プログラミングについて話す
PythonプログラミングPycharm高速学習
SecureCRTでのPythonスクリプトの記述
GooglePythonプログラミングスタイルガイド
Pythonで一般的に使用される魔法の方法
Pythonオブジェクト指向プログラミングの分析
XTUプログラミングPythonトレーニング3
ブラックハットプログラミングアプリケーションPython2
Python1のブラックハットプログラミングアプリケーション
pythonオブジェクト指向プログラミングを理解する方法
Pythonの古典的なプログラミングの質問:文字列の置換