接上一篇:写一个python文件,在shell脚本中运行
可以看下下面的一个参数例子
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument('-b', '--batch_size', type=int, default=64)
parser.add_argument('-i', '--image_directory', type=str, default='FGNET/images')
parser.add_argument('-ls', '--leave_subject', type=int, default=1)
parser.add_argument('-lr', '--learning_rate', type=float, default=0.001)
parser.add_argument('-e', '--epoch', type=int, default=100)
parser.add_argument('-r', '--resume', type=str, default=None)
parser.add_argument('-K', '--K', type=int, default=6)
parser.add_argument('-L1', '--LAMBDA1', type=float, default=0.2)
parser.add_argument('-L2', '--LAMBDA2', type=float, default=0.25)
parser.add_argument('--net', type=str, default='ResNet', help='VGG/ResNet')
parser.add_argument('-s', '--seed', type=int, default=42)
parser.add_argument('-m', '--milestones', nargs='+', required=True, default=15) # -m 是一个短选项参数,后面跟着一系列值 15 30 45 60 75 90,表示将这些值作为参数传递给 -m。
parser.add_argument('-rd', '--result_directory', type=str, default="FGNET_experiments/subject")
parser.add_argument('-pi', '--pred_image', type=str, default=None)
parser.add_argument('-pm', '--pred_model', type=str, default=None)
parser.add_argument('-K', '--K', type=int, default=6)
parser.add_argument('--loss', type=str, default='mrloss', help='mean_softmax/residual_softmax/softmax/mrloss/mvloss')
parser.add_argument('--SGD', action='store_true')
parser.add_argument('--Adam', action='store_true')
parser.add_argument('--gpu', type=int, default=2, help='GPU to use')
return parser.parse_args()
参数详解
name or flags
:参数的名称或选项。可以是一个字符串,例如'--batch_size'
或'-b'
,也可以是一个字符串列表,例如['-b', '--batch_size']
,其中--batch_size
是长选项,-b
是短选项。type:表示输入参数的类型,可以是int,str,float
default:表示参数默认的值
help: 帮助信息,例如
help='VGG/ResNet'
提供了关于该参数的帮助信息,当用户使用-h
或--help
选项时,该信息将显示在帮助文档中。nargs:用于定义一个选项参数应该消耗的命令行参数数量。它可以接受以下不同的取值:
'+'
:表示选项参数可以接受一个或多个参数值。多个参数值将被解析为一个列表。例如,-m 15 30 45
将解析为args.milestones = [15, 30, 45]
。
'*'
:表示选项参数可以接受零个或多个参数值。多个参数值将被解析为一个列表。例如,-m 15 30 45
将解析为args.milestones = [15, 30, 45]
,而不提供-m
参数将解析为args.milestones = []
。
int
:表示选项参数应该消耗固定数量的参数值。例如,nargs=2
表示选项参数需要接受两个参数值。例如,-m 15 30
将解析为args.milestones = [15, 30]
。
argparse.REMAINDER
:表示选项参数应该消耗剩余的命令行参数,将其解析为一个列表。例如,-m 15 30 45 60 75 90
将解析为args.milestones = [15, 30, 45, 60, 75, 90]
。
required
:指定该参数是否是必需的。默认为False
,即可选参数。如果将其设置为True
,则在命令行中必须提供该参数,否则将引发错误。
choices
:指定参数的可选值列表。如果设置了该参数,那么命令行中提供的值必须是列表中的一个,否则将引发错误。
action
:指定参数的动作。常见的动作包括'store'
(默认动作,将参数值存储为属性)、'store_true'
(将参数解析为True
)、'store_false'
(将参数解析为False
)、'append'
(将多个参数值存储为列表)等。
help.py
import argparse
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument('--net', type=str, default='ResNet', help='VGG/ResNet')
return parser.parse_args()
def main():
args = get_args()
# 获取命令行参数的值
net = args.net
# 在这里使用参数进行相应的操作
print(f"net: {net}")
if __name__ == '__main__':
main()
使用shell命令行查看帮助信息,一般代码是自己写,不会看的哈!
python filename.py --help
python filename.py -h
help.py文件
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--input', action='store', type=str, help='Input file path')
parser.add_argument('--verbose', action='store_true', help='Enable verbose mode')
parser.add_argument('--output', action='append', help='Output file path')
args = parser.parse_args()
# 使用解析后的参数进行后续处理
if args.input:
print(f'Input file: {args.input}')
if args.verbose:
print('Verbose mode enabled')
if args.output:
print(f'Output files: {args.output}')
if __name__ == '__main__':
main()
store_false与store_true一样,知识默认识别为真和假。
--input
参数使用了默认的 store
动作,将输入文件路径存储为字符串类型的属性。
--verbose
参数使用了 store_true
动作,将其解析为布尔值类型的属性。当命令行中使用了 --verbose
选项时,args.verbose
的值将为 True
。
--output
参数使用了 append
动作,将多个输出文件路径存储为列表类型的属性。在命令行中多次使用 --output
选项并提供不同的值,例如 --output file1.txt --output file2.txt
,则 args.output
将包含 ['file1.txt', 'file2.txt']
。
运行1中给的代码,就会报错。
没法debug,只好将那行参数注释,在主函数中赋初值给milestones,再debug看看。改代码真的要耐着性子,不然一有错,就不想搞了。