我正在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)和python2.7.0运行
该脚本已经在MacOS上用Python2.7.10和Python2.7进行了测试,在Ubuntu上用Python2.7.10进行了测试。该脚本在这些环境中完美地运行,但在CentOS中却没有。我甚至尝试将上面的命令复制粘贴到MacOS终端和CentOS ssh中,以确保键入正确,但结果是相同的
CentOS怎么了?它以不同的方式对待争论吗
更新:原来,通过pyenv安装的python2.7.10已经完成了这个任务,args.func现在通过子parser中的func=mkdb正确分配
相关问题 更多 >
编程相关推荐