如果在运行python脚本时需要传入一些参数,例如name
与age,可以使用如下方式。
python script.py '逍遥子,乔峰,孙悟空' 888
python test.py --name '逍遥子,乔峰,孙悟空' --age 888
这三种格式对应不同的参数解析方式,分别为sys.argv
、argparse、
tf.app.run,
前两者是python自带的功能,后者是tensorflow
提供的便捷方式。
1.sys.argv
特点:最简单,数据格式为列表,获取到的数据有点乱
代码:
# -*- coding: utf-8 -*-
import sys
arg=sys.argv
print(arg)
# 执行:python test.py 123 456 789
# ['test.py', '123', '456', '789']
2.argparse
特点:简单,可以定义输入类型和默认值,获取到的数据整洁
代码:
# -*- coding: utf-8 -*-
import argparse
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument("--name", type=str, default="0", help='input name')
parser.add_argument("--age", type=int, default=32,help='input total age')
args = parser.parse_args()
print(args.name)
print(args.age)
# 执行:python test.py --name '逍遥子,乔峰,孙悟空' --age 888
# 逍遥子,乔峰,孙悟空
# 888
add_argument() 方法详解:
name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
action - 当参数在命令行中出现时使用的动作基本类型。
nargs - 命令行参数应当消耗的数目。
const - 被一些 action 和 nargs 选择所需求的常数。
default - 当参数未在命令行中出现时使用的值。
type - 命令行参数应当被转换成的类型。
choices - 可用的参数的容器。
required - 此命令行选项是否可省略 (仅选项可用)。
help - 一个此选项作用的简单描述。
metavar - 在使用方法消息中使用的参数值示例。
dest - 被添加到 parse_args() 所返回对象上的属性名。
注意:parser.add_argument
方法的type
参数理论上可以是任何合法的类型, 但有些参数传入格式比较麻烦,例如list,所以一般使用bool
, int
, str
, float
这些基本类型就行了,更复杂的需求可以通过str
传入,然后手动解析。bool
类型的解析比较特殊,传入任何值都会被解析成True
,传入空值时才为False.
3.tf.app.run
特点:定义比较麻烦,和argparser功能基本一样,可以定义输入类型和默认值
代码:
# -*- coding: utf-8 -*-
import tensorflow as tf
tf.app.flags.DEFINE_string('name', None, 'input name')
tf.app.flags.DEFINE_integer('age', 5, 'input total age')
FLAGS = tf.app.flags.FLAGS
def main(_):
print(FLAGS.name)
print(FLAGS.age)
if __name__=="__main__":
tf.app.run()