您的位置:首页 > 编程语言 > Python开发

python中sys.argv[]的用法

2018-03-09 17:02 453 查看
参考自: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中配置参数,配置方法如下:





二、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属性:



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



3、定义一个主函数调用上述函数,并写好主函数的入口:def main(args):
print(args.name)
print(args.age)

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



运行这个程序:



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 函数