参考自: python中sys.argv[]的用法.
1. 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 [ ] 其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,从外部来运行程序并给出参数。
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属性:
在命令行运行上述命令,显示:
3、定义一个主函数调用上述函数,并写好主函数的入口:
def main(args):
print(args.name)
print(args.age)
if __name__ == '__main__':
main(parse_arguments(sys.argv[1:]))
最终代码如下:
import sys
import argparse
def parse_argument(argv):
""" 参数传递函数 """
parser = argparse.ArgumentParser()
parser.add_argument('--name',type=str, default='Tom',help='这保存的是姓名信息')
parser.add_argument('--age',default='18',help='这保存的是年龄信息')
return parser.parse_args(argv)
def main(args):
print(args.name)
print(args.age)
if __name__ == '__main__':
main(parse_argument(sys.argv[1:]))
运行这个程序:
D:\software_install_position\anaconda3\envs\tf_1_13_1_py376\python.exe F:/Python_Code/sys_arg_note/sys_arg_test_main.py
Tom
18
Process finished with exit code 0
证明我们添加的两个参数已经在运行的时候被导入了进去。(此时给的参数是默认的 default)