当我们在命令行使用一些软件的时候,往往通过-h/–help两个参数查看软件指定的输入输出是什么,就像下面图片这样:
最近自己在琢磨用python写一个分析流程,也想要这样的效果,找了找发现python自带的argparse
包便能实现这样的效果。
模板
我们创建一个名为test.py的文件,在里面进行测试。
# 导入库
import argparse
# 获取实例
parser = argparse.ArgumentParser()
# 解析命令行参数
args = parser.parse_args()
运行之后可得到如下结果:
结构大致就是这样,然后我们可以逐渐添加程序描述和参数。
描述
# 导入库
import argparse
# 获取实例
parser = argparse.ArgumentParser(
description="""
##################################
# Cell Free RNA Analysis Pipeline#
##################################
"""
)
# 解析命令行参数
args = parser.parse_args()
运行之后得到的结果如下:
可以看到这个描述和我们期望输出的样式不一样,这个问题可以通过添加参数formatter_class=argparse.RawTextHelpFormatter
实现。
能够实现类似功能的还有formatter_class=argparse.RawDescriptionHelpFormatter
参数。
二者的区别在于:
- argparse.RawTextHelpFormatter 保留原始文本格式,包括换行符,适用于需要保留每行格式的情况,比如多行文本或代码示例。
- argparse.RawDescriptionHelpFormatter 保留段落格式,但移除每行的额外缩进,适用于简单的段落式帮助信息,不需要保留每行的格式。
参数
现在我们可以进一步添加参数
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter, # 指定帮助信息输出格式
description="""
##################################
# Cell Free RNA Analysis Pipeline#
##################################
""",
)
parser.add_argument("-v", "--version", action="version", version="%(prog)s 1.0")
parser.add_argument("-j", "--json", type=str, help="流程配置文件", required=True)
parser.add_argument("-i", "--in_file", type=str, help="输入文件", required=True)
parser.add_argument("-o", "--out_path", type=str, help="输出路径", required=True)
parser.add_argument("-P", "--project", type=str, help="项目编号", default="project_number")
# 解析命令行参数
args = parser.parse_args()
运行python test.py -h
,得到如下结果:
运行python test.py -v
便可得到版本号:
补充描述
我们还可以通过参数epilog
在optional arguments:
后面输出文本,对程序的描述进行补充;
import argparse
# 获取实例
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter, # 指定帮助信息输出格式
description="""
##################################
# Cell Free RNA Analysis Pipeline#
##################################
""",
epilog="V wo wu shi, I want to eat crazy Thursday KFC", # help时显示的结尾文字
)
parser.add_argument("-v", "--version", action="version", version="%(prog)s 1.0")
parser.add_argument("-j", "--json", type=str, help="流程配置文件", required=True)
parser.add_argument("-i", "--in_file", type=str, help="输入文件", required=True)
parser.add_argument("-o", "--out_path", type=str, help="输出路径", required=True)
parser.add_argument("-P", "--project", type=str, help="项目编号", default="project_number")
# 解析命令行参数
args = parser.parse_args()
运行python test.py -h
结果如下:
解析参数
argparse
包不只是能够输出这么多信息,同时还能够解析输入的参数。
import argparse
# 获取实例
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter, # 指定帮助信息输出格式
description="""
##################################
# Cell Free RNA Analysis Pipeline#
##################################
""",
epilog="V wo wu shi, I want to eat crazy Thursday KFC", # help时显示的结尾文字
)
parser.add_argument("-v", "--version", action="version", version="%(prog)s 1.0")
parser.add_argument("-j", "--json", type=str, help="流程配置文件", required=True)
parser.add_argument("-i", "--in_file", type=str, help="输入文件", required=True)
parser.add_argument("-o", "--out_path", type=str, help="输出路径", required=True)
parser.add_argument("-P", "--project", type=str, help="项目编号", default="project_number")
# 解析命令行参数
args = parser.parse_args()
json_file = args.json
input_file = args.in_file
output_path = args.out_path
project = args.project
print(json_file)
print(input_file)
print(output_path)
print(project)
运行结果:
因为目前的参数已经够用(甚至还能整活😀),这个包其他的参数还没有再去尝试,更多信息大家可以参考官方帮助文档