我有以下使用argparse解析参数的帮助器函数:

def get_cli_arguments():
    parser = argparse.ArgumentParser(prog='Xtrayce')
    parser.add_argument(
        "-o", "--output",
        default=get_default_output_path(),
        help="Supply an output path.",
        type=argparse.FileType('wb'),
    )
    parser.add_argument(
        "-d", "--dry",
        help="Don't save a file with the output.",
        action="store_true",
    )
    parser.add_argument(
        "-s", "--standard",
        help="Also scan standard library and modules.",
        action="store_true",
    )


我希望每当用户指定--dry标志时,都不会从--output参数创建文件。

当用户指定--dry,同时仍使用default=type=argparse.FileType("wb")时,“取消”文件创建的最佳方法是什么?

最佳答案

没有简单的方法可以通过默认的ArgumentParser来执行此操作,因为将在参数解析期间创建该文件。

您可以将--output的类型更改为字符串并在写入之前添加检查:

parser = argparse.ArgumentParser(prog='Xtrayce')
parser.add_argument(
    "-o", "--output",
    default=get_default_output_path(),
    help="Supply an output path.",
)
parser.add_argument(
    "-d", "--dry",
    help="Don't save a file with the output.",
    action="store_true",
)

if not args.dry:
    with open(args.output, 'wb') as f:
        f.write(...)


或者,也可以不提供--dry参数,而提供-作为--output参数,该参数将写入sys.stdout而不是文件。

the docs


  FileType对象可以自动理解伪参数“-”
  将其转换为sys.stdin用于可读的FileType对象,并
  sys.stdout用于可写的FileType对象:

parser.add_argument('infile', type=argparse.FileType('r'))
parser.parse_args(['-']) Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>)```

关于python - Python argparse:“Dry run”标志可使用禁用其他标志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59195923/

10-09 07:53