python参数解析参数的变量名



im是新的python argparse,我想让它成为这样,所以用法如下:

mono.py [-h] (--encrypt KEY | --decrypt KEY) [--out FILE] FILE

但我所能做的就是

import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("--encrypt",dest='key',action="store_true", help="enrycpt given a key")
group.add_argument("--decrypt",dest='key',action="store_true", help="decrypt given a key")
parser.add_argument("--out",help="if --out is specified output to the file", action="store_true")
parser.add_argument("FILE", help="FILE to decrypt/encrypt")
args = parser.parse_args()

它给出了这样的用法:

mono.py [-h] (--encrypt| --decrypt) [--out] FILE

有人能解释一下如何将变量KEY/FILE链接到参数吗?

首先,不要将action="store_true"用于要接受参数的选项。如果提供了选项,它们将只存储True,如果没有,则存储False。有关操作,请参阅文档。

接下来,使用metavar而不是dest,正如jonrsharpe在评论中指出的那样:

请注意,您无法从生成的命名空间中判断用户是要求您加密还是解密,这可能是一个问题。

最后,对--out也使用一个metavar。

下面是一个示例,为了简单起见,去掉了FILE参数和帮助文本:

import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("--encrypt", metavar='KEY')
group.add_argument("--decrypt", metavar='KEY')
parser.add_argument("--out", metavar="FILE")
parser.print_usage()

输出:

usage: tmp.py [-h] (--encrypt KEY | --decrypt KEY) [--out FILE]

解析示例:

for s in '--encrypt k', '--decrypt k', '--encrypt k --out f':
print(parser.parse_args(s.split()))
Namespace(decrypt=None, encrypt='k', out=None)
Namespace(decrypt='k', encrypt=None, out=None)
Namespace(decrypt=None, encrypt='k', out='f')

加密和解密(伪代码(的示例用法:

file = args.file
if args.encrypt is not None:
key = args.encrypt
encrypt(file, key)
elif args.decrypt is not None:
key = args.decrypt
decrypt(file, key)
else:
error('This should never happen') 

这可能写得更有说服力一些。例如,可以将KEY设置为必需的位置参数,而不是--encrypt/--decrypt的参数。

相关内容

  • 没有找到相关文章

最新更新