Python argparse帮助信息格式异常及优化需求咨询
问题描述
使用argparse编写Python参数解析代码时,运行main.py生成的帮助信息里,-f等参数后会自动插入大写的FASTQ字样,不符合预期的简洁格式(期望呈现为-f, --fastq Fastq_file location这类形式)。
代码示例
import sys from argparse import ArgumentParser, RawTextHelpFormatter from os import getcwd cwd = getcwd() parser = ArgumentParser(description='RAPIT', formatter_class=RawTextHelpFormatter) parser.add_argument("-f", "--fastq", help="Fastq_file location", required=True) parser.add_argument("-w", "--workdir", default=cwd, help="Provide Working directory") parser.add_argument("-c", "--cleanRUN", action="store_true", help="Delete SAM files") parser.add_argument("-g", "--gtf", default="", help="GTF file location") parser.add_argument("-s", "--starIndex", default="", help="STAR indexed genome location") if len(sys.argv) == 1: parser.print_help(sys.stderr) sys.exit(1) args = parser.parse_args()
当前帮助输出
usage: main.py -f FASTQ [-w WORKDIR] [-c] [-g GTF] [-s STARINDEX]
RAPIT
options:
-f FASTQ, --fastq FASTQ
Fastq_file location
-w WORKDIR, --workdir WORKDIR
Provide Working directory
-c, --cleanRUN Delete SAM files
-g GTF, --gtf GTF GTF file location
-s STARINDEX, --starIndex STARINDEX
STAR indexed genome location
问题原因
argparse默认会将参数的长名称(如--fastq)转换为全大写形式,作为参数值的占位符显示在帮助信息中,用于提示用户需要传入的参数类型或名称,这是工具的默认行为。
解决方法
通过add_argument方法的metavar参数自定义占位符,或设置为None/空字符串隐藏占位符,即可实现简洁的帮助格式:
方法1:自定义简洁占位符
如果需要保留占位符但用更简洁的形式,可指定自定义标识:
parser.add_argument("-f", "--fastq", help="Fastq_file location", required=True, metavar="FILE") parser.add_argument("-w", "--workdir", default=cwd, help="Provide Working directory", metavar="DIR") parser.add_argument("-g", "--gtf", default="", help="GTF file location", metavar="FILE") parser.add_argument("-s", "--starIndex", default="", help="STAR indexed genome location", metavar="DIR")
方法2:隐藏占位符
如果不需要显示占位符,直接让帮助信息只保留参数选项和说明:
parser.add_argument("-f", "--fastq", help="Fastq_file location", required=True, metavar="") parser.add_argument("-w", "--workdir", default=cwd, help="Provide Working directory", metavar="") parser.add_argument("-g", "--gtf", default="", help="GTF file location", metavar="") parser.add_argument("-s", "--starIndex", default="", help="STAR indexed genome location", metavar="")
修改后的帮助信息示例(以方法2为例):
usage: main.py -f [-w ] [-c] [-g ] [-s ]
RAPIT
options:
-f, --fastq Fastq_file location
-w, --workdir Provide Working directory
-c, --cleanRUN Delete SAM files
-g, --gtf GTF file location
-s, --starIndex STAR indexed genome location
若希望usage部分也更清晰,可结合usage参数自定义文本:
parser = ArgumentParser( description='RAPIT', formatter_class=RawTextHelpFormatter, usage="main.py -f <fastq_file> [-w <workdir>] [-c] [-g <gtf_file>] [-s <star_index>]" )
内容的提问来源于stack exchange,提问作者pahi

