2016-03-23 9 views
0

を使用してfile_nameにして、ファイルを取るためにはどうすれば、ユーザーから1つのフラグを使用して ssh_key_fileがfile_nameにを取る必要があります。どんな助けもありがたい。 ユーザ入力は、次のようになります。
python xx.py --file ssh_key_file.pub file_name
のPython 2.7 argparseは:単一のフラグ


私は

サンプルコードは、下記のように見えるかもしれないいくつかの理由で相互に排他的なグループを使用する必要があります。

ap = argparse.ArgumentParser()` 
xap = ap.add_mutually_exclusive_group()` 
xap.add_argument('--file', 
       dest='exp_kp', 
       nargs=2, 
       type=argparse.FileType('rb'), 
       help='Key file and key name')` 

それがすることが可能です上記の--fileでfile_nameを取る?

ありがとうございます。

答えて

0
ap = argparse.ArgumentParser() 

このグループに追加する他の引数がありますか?これは、ファイル名として両方の引数を処理し、両方を開こうとします書かれたよう

xap = ap.add_mutually_exclusive_group() 

(それは= 2 NARGSを持っている場合でも)だけで有用ではありません。 typeは、1つではなく、両方の引数に適用されます。

xap.add_argument('--file', 
        dest='exp_kp', 
        nargs=2, 
        type=argparse.FileType('rb'), 
        help='Key file and key name') 

FileTypeは単なる利便typeです。ファイルをオープンしようとしますが、問題があると終了するとargparseエラーが発生します。欠点は、開いたファイルを閉じることがあなたの責任であることです。好ましいwithコンテキストでは使用できません。本当の利点はargparseエラーだけです。

xap.add_argument('--file', 
        dest='exp_kp', 
        nargs=2, 
        metavar=('FILE','KEY'), 
        help='Key file and key name') 

この形式は、例えば、あなたが望むようあなたが処理できる2つの文字列を、受け入れますそこの問題は、あなたがまだ `parser.errorでargparseエラーを発生させることができ、このファイルを開く場合は

with open(args.exp_kp[0],'rb') as f: 
     lines = f.readlines() 
     for l in lines: 
      if args.exp_kp[1] in l: 
       print(l) 

コールを(「ここにメッセージを入れ」)。

+0

お返事ありがとうございます。はい、私は 'apとxap'の両方でいくつかの他の引数を持っています。 私はあなたの説明/議論を持っています。私はファイルIOを処理するためにargparseが必要でしたが、上記の方法で修正することができました。 – bluemoon

関連する問題