我们知道,把通过命令行执行python脚本很简单,直接执行python +文件路径+文件名就可以了
如果想在命令行执行py脚本的时候对python脚本传参数,应该如何完成?
这里使用的环境是在windows系统下,Python版本3.6.5

场景1:要求你给一个脚本传参,参数是要执行的年份数据,建立一个简单的test.py

执行,查看结果

可以看到,按照脚本已经成功输出了我们传入的参数,如果是多个参数呢?我们修改脚本


可以看到,多个参数,在输入的时候以空格隔开即可,在脚本中,以sys.argv[1:]进行设置
sys.argv在脚本中,是一个list,sys.argv[0]是脚本名,sys.argv[1]是参数1,sys.argv[2]是参数2
len(sys.argv)可以查看参数个数
场景2:要求你给一个脚本传参,参数是要执行的年份数据,如果不输入参数,则默认为本年年份,打开刚才的test.py

我们使用一个if语句,检测是否有参数传入,若有,则输出参数,若无,则输出使用datetime获取的当前年份
执行,查看结果

可以使用sys.exit()关闭sys
此外,getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。
该模块提供了两个方法及一个异常处理来解析命令行参数。
getopt.getopt 方法用于解析命令行参数列表,语法格式如下:
getopt.getopt(args, options[, long_options])
方法参数说明:
args: 要解析的命令行参数列表。
options: 以列表的格式定义,options后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。
long_options: 以字符串的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。
该方法返回值由两个元素组成: 第一个是 (option,
value) 元组的列表。 第二个是参数列表,包含那些没有'-'或'–'的参数。
以上getopt模块的解释来源于https://blog.csdn.net/bloodsuckerm/article/details/79205703
场景3:我们需要py脚本处理一个文件,且将处理结果传到另一个文件,使用-i和-o来区分传入参数的类型

执行

网友评论