首页 > 解决方案 > Argparse 在 CentOS 7 上无法正确解析参数

问题描述

我正在 CentOS 7 机器上设置一个服务器,它将定期运行 Python 脚本。但是,我在 argparse 解析传递给脚本的参数时遇到问题。

这是我的参数设置的片段:

    main_parser = argparse.ArgumentParser(
     description=__doc__,
     formatter_class=argparse.RawDescriptionHelpFormatter)
    main_parser.add_argument('--loglevel','-l',
                             help='loglevel NONE, NORMAL, VERBOSE, VVERBOSE, DEBUG',
                             default="ERROR")

    main_parser.add_argument("--dbfile", "-d", default="archi_tool.db")
    main_parser.add_argument("--prefix", "-p", default="LSST_")
    main_parser.set_defaults(func=None) # if none then there are  subfunctions
    subparsers = main_parser.add_subparsers(title="subcommands",
                       description='valid subcommands',
                       help='additional help')
    # Subcommand  to ingest csv to sqlite3 db file
    mkdb_parser = subparsers.add_parser('mkdb', description=mkdb.__doc__)
    mkdb_parser.set_defaults(func=mkdb)
    mkdb_parser.add_argument("--force", "-f", help="remove existing db file of the same name", default=False, action='store_true')


    # Subcommand  to ingest csv to sqlite3 db file
    ingest_parser = subparsers.add_parser('ingest', description=ingest.__doc__)
    ingest_parser.set_defaults(func=ingest)
    #ingest_parser.add_argument("sqldbfile")

    list_parser = subparsers.add_parser('list', description=list.__doc__)
    list_parser.set_defaults(func=list)
    list_parser.add_argument(   "--chr", "-c", help='Chromosome Numbers' , default='1')

    # Subcommand  to ingest csv to sqlite3 db file
    era_ingest_parser = subparsers.add_parser('era_ingest', description=era_ingest.__doc__)
    era_ingest_parser.set_defaults(func=era_ingest)

    dbinfo_parser = subparsers.add_parser('dbinfo', description=dbinfo.__doc__)
    dbinfo_parser.set_defaults(func=dbinfo)

    # reasonably detailed list of model summary information
    modelinfo_parser = subparsers.add_parser('modelinfo', description=modelinfo.__doc__)
    modelinfo_parser.set_defaults(func=modelinfo)

    # reasonably detailed list of model summary information
    like_parser = subparsers.add_parser('like', description=like.__doc__)
    like_parser.set_defaults(func=like)
    like_parser.add_argument("pattern", help="SQL pattern for matching")

    archi_interface.parsers(subparsers)
    conventions.parsers(subparsers)

    args = main_parser.parse_args()

我尝试启动以下命令:

python archi_tool.py -l VERBOSE -p LSST mkdb

我也尝试过详细的变体:

python archi_tool.py --loglevel VERBOSE --prefix LSST mkdb

在 CentOS 7 上,它好像没有传递任何参数或调用了 -h 一样失败,显示“使用”打印输出。我尝试使用通过 pyenv 安装的系统 python (2.7.5) 和 python 2.7.0 运行。

该脚本已在带有 python 2.7.10 和 python 2.7 的 MacOS 以及带有 python 2.7.10 的 Ubuntu 上进行了测试。该脚本可以在这些环境中完美运行,但不能在 CentOS 中运行。我什至尝试将上面的命令复制粘贴到 MacOS 终端和 CentOS ssh 中,以确保我输入正确,但结果是一样的。

CentOS 怎么了?它是否以不同的方式处理论点?

标签: pythoncentos7argparse

解决方案


更新:事实证明,通过 pyenv 安装的 python 2.7.10 已经成功了,现在通过子解析器中的 func=mkdb 正确分配了 args.func。


推荐阅读