ssh
コマンドラインクライアントのラッパーを作成しています。の一部である最初の位置引数の後、それ以降のcommand
すべてのオプションも位置引数として扱われる必要があります。
の下optparse
で、これはで行われると思いますdisable_interspersed_args
。
現在、私はこのようなものを持っています:
parser = argparse.ArgumentParser()
parser.add_argument('--parallel', default=False, action='store_true')
# maybe allow no command? this would ssh interactively into each machine...
parser.add_argument('command', nargs='+')
args = parser.parse_args()
ただし、オプションがコマンドの一部として渡された場合(など)、代わりに不明なオプションとしてmy_wrapper ls -l
解釈されます。ArgumentParser
error: unrecognized arguments: -l
を使用するparse_known_args()
と、オプションが乱れる可能性があります。
p = argparse.ArgumentParser()
p.add_argument('-a', action='store_true')
p.add_argument('command', nargs='+')
print(p.parse_known_args())
$ python3 bah.py -b ls -l -a
(Namespace(a=True, command=['ls']), ['-b', '-l'])
-b
ここでは、以前のの位置ls
が失わ-a
れ、コマンドから解析されていることがわかりますが、これは望ましくありません。
どうやって:
- 特定の時点以降に引数が解析されないようにしますか?
- 散在する引数の解析を無効にしますか?
- 接頭辞付きの引数を位置引数として使用できるようにしますか?