5

我正在编写一个简单的 Python 脚本来导出、导入和比较数据库。我想让用户提供他们想要运行脚本的“模式”,我选择了导入、导出和差异作为我的选项。当我通过 argparse 运行它时,所有解析的选项都以 args 结尾,我可以使用 arg.export 或 args.diff 访问它们,但由于“import”是一个关键字,我遇到了问题。

我可以做一些变通方法来让它工作,但我想知道是否有可能保留我所拥有的。例如,我可以将选项缩短为“exp”、“imp”和“diff”,或者我可以做一个名为“mode”的选项,期望传入“import”、“export”或“diff”。

我当前的代码:

parser = argparse.ArgumentParser()

group = parser.add_mutually_exclusive_group()
group.add_argument("--export", help="Export source(s)", action="store_true")
group.add_argument("--import", help="Import source(s)", action="store_true")
group.add_argument("--diff", help="Diff sources", action="store_true")

parser.add_argument("filename", help="XML Filename used for exporting to, importing from or comparing while doing diff.")

args = parser.parse_args()

if args.export:
    export_sources(args.filename)
elif args.import:
    import_sources(args.filename)
elif args.diff:
    diff_sources(args.filename)
4

2 回答 2

4

好的,如果我使用“dest”,我仍然可以使用--import,但让它在内部转到“imp”。

    parser = argparse.ArgumentParser()

group = parser.add_mutually_exclusive_group()
group.add_argument("--export", help="Export source(s)", action="store_true")
group.add_argument("--import", dest="imp", help="Import source(s)", action="store_true")
group.add_argument("--diff", help="Diff sources", action="store_true")

parser.add_argument("filename", help="XML Filename used for exporting to, importing from or comparing while doing diff.")

args = parser.parse_args()

if args.export:
    export_sources(args.filename)
elif args.imp:
    import_sources(args.filename)
elif args.diff:
    diff_sources(args.filename)
于 2013-03-30T03:45:49.983 回答
3

您还可以使用以下方法访问解析的参数getattr

parser = argparse.ArgumentParser()
parser.add_argument('--import')
args = parser.parse_args()
import_value = getattr(args, 'import', None)  # defaults to None

或者检查参数是否存在,然后将其读入变量:

# [...]
if hasattr(args, 'import'):
    import_value = getattr(args, 'import')
于 2017-07-31T14:34:55.160 回答