python中sys.argv[]的用法

参考自:Python中 sys.argv[]的用法简明解释。

在阅读facenet网络的代码的时候,遇到了sys.argv[]这个函数,看了上边的博客,觉得案例写得非常好就转过来了。留个坑记录一下,以后有深入理解继续补充。

一、sys.argv[]的用法

sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白。因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。

下面我们通过一个极简单的test.py程序的运行结果来说明它的用法。

 #test.py
 import sys
 a=sys.argv[0]
 print(a)

将test.py保存在c盘的根目录下。

在程序中找到 ‘运行’->点击->输入"cmd"->回车键   进入控制台命令窗口(如下图),先输入cd c:\   (作用是将命令路径改到c盘根目录),然后输入test.py运行我们刚刚写的程序:

 

得到的结果是C:\test.py,这就是0指代码本身(即此.py程序)本身的意思。

然后我们将代码中0改为1 :

a=sys.argv[1]

保存后,再从控制台窗口运行,这次我们加上一个参数,输入:test.py what

 

 得到的结果就是我们输入的参数what,看到这里你是不是开始明白了呢。

那我们再把代码修改一下:

a=sys.argv[2:]

保存后,再从控制台窗台运行程序,这次多加几个参数,以空格隔开:

test.py a b c d e f

 

得到的结果为[‘b’, ’c’, ’d’, ’e’, ’f’]

总结:sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,从外部来运行程序并给出参数。

对于facenet网络(一个人脸识别网络),需要传入预训练的模型参数以及两张需要比较的图片。可以通过以下代码运行:

python compare.py 20170511-185253 1.jpg 2.jpg

其中,第一个参数(20170511-185253)就是模型数据,第二三个参数(1.jpg 2.jpg)就是需要对比的图片。

当然,如果你使用的是pycharm,也可以在运行程序之前在pycharm中配置参数,配置方法如下:

python中sys.argv[]的用法_第1张图片

python中sys.argv[]的用法_第2张图片


二、sys.arg[]与parser.add_argument()配合使用

了解了的sys.arg[]的用法,其实我们也可以不用每次运行前都带上参数,或者每次打开pycharm的时候都要配置参数。也可以写在程序里,这就用到了系统预置的argparse包,

具体步骤:

1、新建一个test_main.py文件,并导入argparse和sys包。

2、定义一个参数传递函数:

def parse_arguments(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument('--name',type = str , default = 'Tom' )
    parser.add_argument('--age',  default='14')
    return parser.parse_args(argv)

parser.add_argument('--名字',type = str , default= '值' )的用法:相当于传了一个字典类型的数据

--名字:字典的key。

值:字典的值

另外,parser.add_argument还有几个常用的属性:

1)type =str,默认为str,也可以指定为float int等类型

2)help:用于显示模块的信息(相当于注释。),当在命令行输入python **.py --help时,可以显示对应的信息。

比如,加上help属性:


在命令行运行上述命令,显示:

python中sys.argv[]的用法_第3张图片

3、定义一个主函数调用上述函数,并写好主函数的入口:

def main(args):
    print(args.name)
    print(args.age)

if __name__ == '__main__':
    main(parse_arguments(sys.argv[1:]))
最终代码如下:

python中sys.argv[]的用法_第4张图片

运行这个程序:


证明我们添加的两个参数已经在运行的时候被导入了进去。


你可能感兴趣的:(python,函数)