1

引数が設定されている--mac argparse場合は、を介したそれ以上のコマンドライン入力を禁止したいと思いますsys.argv。これは可能ですか?

私が書いているスクリプトは、引数を取ることができるか、(XOR)クエリされるMACアドレスの位置引数を持つN sys.argv[1:]単一の引数を取ることができるはずです。--mac

現在、N sys.argv[1:]RESTAPIに送信されるクエリ文字列を作成するために渡されています。

私はこれができるようになりたいです:

if args.mac is not None: do_MAC_operation()
else do_BizBar()

私がこれまでに持っているもの:

parser = argparse.ArgumentParser() parser.add_argument("-v" "--verbose", action="store_true", help="verbose output")
group = parser.add_mutually_exclusive_group(required=True) 
group.add_argument("-m", "--mac", action="store_const", const="mac_address" help="search by MAC address") 
args = parser.parse_args()

助言がありますか?

4

1 に答える 1

1

実行時に許可される位置引数の数がわからないため、少し後処理が必要になります。

p = ArgumentParser()
p.add_argument("-m", "--mac", action="store_const", const="mac_address")
p.add_argument("addresses", nargs="*")

args = p.parse_args()

if args.mac is not None and len(args.addresses) > 1:
    p.error("Only one argument allowed in conjunction with --mac")

もう1つのオプションは、位置引数を使用する代わりに、相互に排他的なグループに対して2つのオプションを作成することです。1つは単一の引数を取り、もう1つは任意の数を取ります。

p = argparse.ArgumentParser()
g = p.add_mutually_exclusive_group(required=True) 
g.add_argument("-m", "--mac", dest="addresses")
g.add_argument("--nonmac", nargs="*", dest="addresses")
args = parser.parse_args()

ここでは、引数プロセッサにmac-vs-nonmacの質問を処理させています。引数を解析した後args.addresses、長さ1のが--macまたはから来たかどうかを判断することはできません--nonmac

于 2013-02-27T18:00:19.417 に答える