私のプログラムには、 argparseによって適切に解析された次のオプションが含まれている必要があります。
- 純粋にオプション:
[-h, --help]
および[-v, --version]
- 相互に排他的:
[-f FILE, --file FILE]
および[-u URL, --url URL]
- が選択された場合はオプション
--url
:[-V, --verbose]
--file
またはが選択された場合は必須--url
:[-F, --format FORMAT]
望ましい使用パターンは次のとおりです。
prog.py [-h] [-v] [-f FILE (-F FORMAT) | -u URL [-V] (-F FORMAT) ]
この-F
要件は、相互に排他的なグループの両方のメンバーに適用されます。
それがむしろ位置的なものであるかどうかはわかりません。
したがって、実行できるはずです:
prog.py -u "http://foo.bar" -V -F csv
そして、私が忘れた場合に備えてパーサーが叫んでいます-F
(彼がそうするはずです)。
私がこれまでに行ったこと:
parser = ArgumentParser(decription='foo')
group = parser.add_mutually_exclusive_group()
group.add_argument('-f','--file', nargs=1, type=str, help='')
group.add_argument('-u','--url', nargs=1, type=str, help='')
parser.add_argument('-V','--verbose', action='store_true', default=False, help='')
parser.add_argument('-F','--format', nargs=1, type=str, help='')
コマンドライン引数なしで実行する「バニラモード」があるため、すべての引数はオプションである必要があります。
ポイント 3. と 4. をコードに実装するにはどうすればよいですか?
編集:ここで説明されているように、サブパーサーとして
試し-f
てみましたが、サブコマンドは位置指定のように扱われるようで、パーサーは引数なしで実行すると、-u
error: too few arguments