python - 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 怎么了?它是否以不同的方式处理论点?
解决方案
更新:事实证明,通过 pyenv 安装的 python 2.7.10 已经成功了,现在通过子解析器中的 func=mkdb 正确分配了 args.func。
推荐阅读
- c# - WPF 使用 Helix 工具,PropertyChangedEventHandler 在尝试更新 ModelVisual3D 视图时始终为空
- javascript - 在 Vue 的子级和父级中使用相同的组件
- react-native - Appcenter Android Build for React-Native with Unity
- javascript - 使用 API_URL 和私钥导入的 Hardhat 编译错误
- c# - System.Data.SqlClient 包引用不在项目引用之间流动
- testing - 出现测试错误“测试数据包含键‘类别’的字典值”
- amazon-web-services - 使用 Python 中的 Lambda 函数将 csv 文件从 S3 传输到 Kinesis Streams
- java - 更新查询以更新批量记录 mongodb
- python - 在 plotly 上设置视图窗口和轴
- c - 使用堆栈的迷宫中的老鼠