2016-05-05 21 views
1

私はopensshクライアントバイナリをラップするPythonスクリプトを持っており、同じ方法で引数を解析する必要があります。私はargparseを使用しています。argparse:定位置引数の前にオプションの引数が必要です

sshでは、ホストへのconect、 "a"としてのログイン、 "ls"の実行を意味します。

ssh -la host ls 

これは "LS -la" をホストし、実行するために接続を意味している間:

ssh host ls -la 

同じように、これらを扱うargparse。 argparseに、オプションの引数が位置引数の前になければならないことを伝える慣用的な方法はありますか?

答えて

4

使用nargs=argparse.REMAINDER

import argparse 

p = argparse.ArgumentParser() 
p.add_argument('-l', '--login') 
p.add_argument('host') 
p.add_argument('cmd', nargs=argparse.REMAINDER) 
print p.parse_args('-la server ls'.split()) 
print p.parse_args('server ls -la'.split()) 

結果:

Namespace(cmd=['ls'], host='server', login='a') 
Namespace(cmd=['ls', '-la'], host='server', login=None) 
-1

​​サブコマンドのコンセプトでは、あなたが達成しようとしていることはかなりうまくいくと思います。それを見てみましょう:https://docs.python.org/3/library/argparse.html#sub-commands

+0

「ホスト」、それは任意の値を持つことができる位置引数ですが、ここでは固定値ではありません。サブパーザへのハンドオフは、特定のコマンドの後ではなく、最初の位置指定引数の後に行わなければなりません。私はそれをする方法を見ていない。 –

関連する問題