如果在运行python脚本时需要传入一些参数,例如name与age,可以使用如下方式。

python script.py '逍遥子,乔峰,孙悟空'  888
python test.py --name '逍遥子,乔峰,孙悟空' --age 888

这三种格式对应不同的参数解析方式,分别为sys.argvargparse、 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,所以一般使用boolintstrfloat这些基本类型就行了,更复杂的需求可以通过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()