gpt4 book ai didi

python - Argparse 和几个独占论据

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:56 25 4
gpt4 key购买 nike

我正在尝试在 python 中实现凯撒密码,并且我正在使用 argparse 来解析参数。

但是我不知道如何创建多个这样的独占参数:

caesar.py        ,-   '-b'
/
'-d' --- xor
/ \
xor `- '-k key'
\
'-e' --- '-k key'
  1. 您必须指定 -d-e(不包括)。

  2. 如果指定 -e,则必须指定 -k-b 被禁止。

  3. 如果指定 -d,则必须指定 -k-b(不包括)。

这是我做的:

parser = argparse.ArgumentParser(description="Caesar Cipher")

parser.add_argument("text", nargs="?", help="message to encode/decode")

parser_code = parser.add_mutually_exclusive_group(required=True)
parser_code.add_argument("-e", action="store_true", help="encode")
parser_code.add_argument("-d", action="store_true", help="decode")

parser_decode = parser.add_mutually_exclusive_group(required=True)
parser_decode.add_argument('-k', type=int, dest="key", help="key to use")
parser_decode.add_argument('-b', action="store_true" help="bruteforce the key")

args = parser.parse_args()

实际上,它不起作用。事实上,我仍然可以使用:

python caesar.py -e -b message

选项 -b 应该没有意义。我知道我可以简单地进行检查并调用 parser.print_help(),但是我希望在解析期间进行此检查,例如独占检查。

最佳答案

我不认为 argparse 有任何条款允许你的情况。我能想到的最好的方法是使用子解析器:

凯撒.py:

import argparse

if __name__ == '__main__':
parser = argparse.ArgumentParser()
actions = parser.add_subparsers(dest='action')

encode_parser = actions.add_parser('encode')
encode_parser.add_argument('-k', type=int, dest="key", help="key to use")

decode_parser = actions.add_parser('decode')
decode_parser.add_argument('-k', type=int, dest="key", help="key to use")
decode_parser.add_argument('-b', dest='bruce_force', action='store_true')

print parser.parse_args()

示例用法:

./caesar.py encode -k 5
./caesar.py decode -k 9 -b

关于python - Argparse 和几个独占论据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com