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解釈されます。ArgumentParsererror: 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れ、コマンドから解析されていることがわかりますが、これは望ましくありません。
どうやって:
- 特定の時点以降に引数が解析されないようにしますか?
- 散在する引数の解析を無効にしますか?
- 接頭辞付きの引数を位置引数として使用できるようにしますか?