python 脚本参数的传递

1.sys.argv
2.getopt
3.argparse

注意: 不能在python IDE上调试

sys.argv

sys.argv 是从外部获取输入的参数,返回的是一个列表list, 第一个参数是脚本的名字, 后面的是依次输入的参数,适合一些简单参数输入的情形。

import sys

if __name__ == '__main__':
    print (sys.argv)

# testing result
python transmit.py name age job
['transmit.py', 'name', 'age', 'job']

getopt

该模块是专门用来处理命令行参数的
函数:opts, args = getopt(args, shortopts, longopts = [])
参数:

  • args: 一般是sys.argv[1:]
  • shortopts: 短格式 (-) , 只表示开关状态时,即后面不带附加数值时,在分析串中写入选项字符。当选项后面要带一个附加数值时,在分析串中写入选项字符同时后面加一个:号 , 如"vc:"。
  • longopts:长格式(--) , 只表示开关状态时,即后面不带附加数值时,在队列中写入选项字符。当选项后面要带一个附加数值时,在队列中写入选项字符同时后面加一个=号 , 如["help", "log="] 。

返回:

  • opts: 分析出的格式信息,是一个两元组的列表,即[(选项串1, 附加参数1), (选项串2, '')], 注意如果没有附加数值则为空字符串
  • args: 为不属于格式信息的剩余的命令行参数
import sys
import getopt


if __name__ == '__main__':
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'hi:', ['help', 'input='])
        print (opts, args)
    except getopt.GetoptError as e:
        print ('Got a eror and exit, error is %s' % str(e))

测试结果如下:

  • 不传任何参数, 返回两个空的list
$ python getopt_test.py
[] []
  • 不传带---的参数, opts是空的列表,args是两个入参的列表
$ python getopt_test.py value1 value2
[] ['value1', 'value2']
  • 输入含有-h的参数, 可以得知h后不接:, 表明-h不会去取值
$ python getopt_test.py -h
[('-h', '')] []
$ python getopt_test.py -h 1
[('-h', '')] ['1']
$ python getopt_test.py -h -p
Got a eror and exit, error is option -p not recognized
  • 输入含有-i的参数, 可以得知i后接:, 表明-i一定会去取值
$ python getopt_test.py -i
Got a eror and exit, error is option -i requires argument
$ python getopt_test.py -i 1
[('-i', '1')] []
$ python getopt_test.py -i -p
[('-i', '-p')] []
  • 输入其他带有-的参数, 会直接报错,不认识这个参数
$ python getopt_test.py -a
Got a eror and exit, error is option -a not recognized
  • 输入带有--的参数, 和带-的参数类似, 如果后面不接=,则表示不需要取值, 后面接了=, 则表示一定要取值。
$ python getopt_test.py --help
[('--help', '')] []

$ python getopt_test.py --help 1
[('--help', '')] ['1']

$ python getopt_test.py --help --ls
Got a eror and exit, error is option --ls not recognized

$ python getopt_test.py --help --input
Got a eror and exit, error is option --input requires argument

$ python getopt_test.py --help --input 2
[('--help', ''), ('--input', '2')] []

$ python getopt_test.py --help --input 2 3
[('--help', ''), ('--input', '2')] ['3']
  • 输入全体参数
$ python getopt_test.py -h -i 1 --help --input 2 3
[('-h', ''), ('-i', '1'), ('--help', ''), ('--input', '2')] ['3']

argparse

argparse 模块可被用来解析命令行选项。
add_argument() 方法定义

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

1. name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo
2. action - 命令行遇到参数时的动作,默认值是 store
    2.1 store_const,表示赋值为const
    2.2 append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值
    2.3 append_const,将参数规范中定义的一个值保存到一个列表
    2.4 count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析
3. nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数
4. const - action 和 nargs 所需要的常量值
5. default - 不指定参数时的默认值
6. type - 命令行参数应该被转换成的类型。
7. choices - 参数可允许的值的一个容器
8. required - 可选参数是否可以省略 (仅针对可选参数)
9. help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息
10. metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称
11. dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线

主要有三个步骤:

  1. 创建 ArgumentParser() 对象
  2. 调用 add_argument() 方法添加参数
  3. 使用 parse_args() 解析添加的参数

实例分析:

import argparse

parser = argparse.ArgumentParser('description=Show the usage')
parser.add_argument('integer', type=int, help='display an integer')
args = parser.parse_args()

print (args.integer)

#result
$ python argparse_test.py -h
usage: description=Show the usage [-h] integer

positional arguments:
  integer     display an integer

optional arguments:
  -h, --help  show this help message and exit
--------------------------------------------------
$ python argparse_test.py 1
1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容