在argparse中使用python关键字作为选项

时间:2013-03-30 03:21:52

标签: python-3.x argparse

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

我可以做一些改变的工作,以使其工作,但我想知道是否可以保留我拥有的东西。例如,我可以将选项缩短为“exp”,“imp”和“diff”,或者我可以做一个名为“mode”的选项,希望传入“import”,“export”或“diff”。 / p>

我目前的代码:

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)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

您也可以使用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')