我有以下使用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/