看一遍例子就懂了。
1.创建你需要的 test.py 文件:
import argparse
# (1) 声明一个parser(解析器)
parser = argparse.ArgumentParser()
# (2) 添加参数
parser.add_argument("parg") # 位置参数,这里表示第一个出现的参数赋值给parg
parser.add_argument("--digit",type=int,help="输入数字") # 通过 --digit xxx 声明的参数,为int类型
parser.add_argument("--name",help="名字",default="cjf") # 同上,default 表示默认值
# (3) 读取命令行参数并解析
args = parser.parse_args()
# (4) 调用这些参数
print(args.parg)
print("echo ={0}".format(args.digit))
print("name = {}".format(args.name))
2.在命令运行端,执行:python test.py myposition --digit 2222,输出结果:
myposition
echo =2222
name = cjf
argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)
prog - 程序的名称(默认:sys.argv[0])
usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
description - 在参数帮助文档之前显示的文本(默认值:无)
epilog - 在参数帮助文档之后显示的文本(默认值:无)
parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
formatter_class - 用于自定义帮助文档输出格式的类
prefix_chars - 可选参数的前缀字符集合(默认值:’-’)
fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None)
argument_default - 参数的全局默认值(默认值: None)
conflict_handler - 解决冲突选项的策略(通常是不必要的)
add_help - 为解析器添加一个 -h/–help 选项(默认值: True)
allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
action - 当参数在命令行中出现时使用的动作基本类型。
nargs - 命令行参数应当消耗的数目。
const - 被一些 action 和 nargs 选择所需求的常数。
default - 当参数未在命令行中出现时使用的值。
type - 命令行参数应当被转换成的类型。
choices - 可用的参数的容器。
required - 此命令行选项是否可省略 (仅选项可用)。
help - 一个此选项作用的简单描述。
metavar - 在使用方法消息中使用的参数值示例。
dest - 被添加到 parse_args() 所返回对象上的属性名。
相比argparse.ArgumentParser() ,sys.argv() 要简单一些。
sys.argv的列表就是我们输入的所有参数的列表,第一个元素是文件的全名,第二个元素是输入的第一个参数,以此类推。。。。。。
我们通过一个极简单的temp2.py程序的运行结果来说明它的用法。
#temp2.py
import sys
print(132456)
if __name__ == '__main__':
if ('--help' in sys.argv) or ('-h' in sys.argv):
print("This is help contents:.......")
将temp2.py保存对应目录下。
用运行的方式打开目录,先换盘,再切换目录。
(lunwen) C:\Users\54719>e:
(lunwen) E:\>cd E:\my_projects\two_reference_projects\membership-inference-master
直接运行这个文件 和 加参数运行,区分不同:
(lunwen) E:\my_projects\two_reference_projects\membership-inference-master>python temp2.py
132456
(lunwen) E:\my_projects\two_reference_projects\membership-inference-master>python temp2.py -h
132456
This is help contents:.......
说明sys.argv这个变量包含了我们输入的 “-h” 并传入文件内部运行。
接下来我们探究一下sys.argv的列表
(lunwen) E:\my_projects\two_reference_projects\membership-inference-master>python temp2.py a s d f g
('sys.argv[0]:', 'temp2.py')
('sys.argv[1:]:', ['a', 's', 'd', 'f', 'g'])
可见输入的参数a s d f g全都被依次放进sys.argv[1]、sys.argv[2]…
我们来看一下Mnist.py里比较高端的用法:
def main(model='mlp', num_epochs=500):
........
if __name__ == '__main__':
if ('--help' in sys.argv) or ('-h' in sys.argv):
print("Trains a neural network on MNIST using Lasagne.")
print("Usage: %s [MODEL [EPOCHS]]" % sys.argv[0])
print()
print("MODEL: 'mlp' for a simple Multi-Layer Perceptron (MLP),")
print(" 'custom_mlp:DEPTH,WIDTH,DROP_IN,DROP_HID' for an MLP")
print(" with DEPTH hidden layers of WIDTH units, DROP_IN")
print(" input dropout and DROP_HID hidden dropout,")
print(" 'cnn' for a simple Convolutional Neural Network (CNN).")
print("EPOCHS: number of training epochs to perform (default: 500)")
else:
kwargs = {}
if len(sys.argv) > 1:
kwargs['model'] = sys.argv[1]
if len(sys.argv) > 2:
kwargs['num_epochs'] = int(sys.argv[2])
main(**kwargs)
附源文件:https://github.com/Lasagne/Lasagne/blob/master/examples/mnist.py
参考:https://blog.csdn.net/vcvycy/article/details/88600134?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159012922019724811835873%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159012922019724811835873&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v25-2-88600134.nonecase&utm_term=argparse.ArgumentParser