zoukankan      html  css  js  c++  java
  • 命令行运行Python脚本时传入参数的三种方式

    原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正)

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

    python script.py 0,1,2 10
    python script.py -gpus=0,1,2 --batch-size=10
    python script.py -gpus=0,1,2 --batch_size=10

    这三种格式对应不同的参数解析方式,分别为sys.argvargparsetf.app.run, 前两者是python自带的功能,最后一个是tensorflow提供的便捷方式(只是在命令行执行时看上去跟第二个相同,源码部分的区别见下)。

     

    sys.argv

    sys模块是很常用的模块, 它封装了与python解释器相关的数据,例如sys.modules里面有已经加载了的所有模块信息,sys.path里面是PYTHONPATH的内容,而sys.argv则封装了传入的参数数据。
    使用sys.argv接收上面第一个命令中包含的参数方式如下:

    import sys
    gpus = sys.argv[1]
    #gpus = [int(gpus.split(','))]
    batch_size = sys.argv[2]
    print(gpus, type(gpus))
    print(batch_size, type(batch_size))

    执行结果:

    D:projectsPycharm Projectssome-toyssomething_else>python argv_test.py 1,0,2 10
    1,0,2 <class 'str'>
    10 <class 'str'>

     

    argparse

    import argparse
    parser = argparse.ArgumentParser(description='manual to this script')
    parser.add_argument('--gpus', type=str, default = None)
    parser.add_argument('--batch-size', type=int, default=32)
    args = parser.parse_args()
    print(args.gpus, type(args.gpus))
    print(args.batch_size, type(args.batch_size))

    执行结果:

    D:projectsPycharm Projectssome-toyssomething_else>python argv_test.py --gpus=0,1,2 --batch-size=20
    0,1,2 <class 'str'>
    20 <class 'int'>

    需要注意的是,脚本运行命令python script.py --gpus=0,1,2 --batch-size=10中的batch-size会被自动解析成batch_size.
    parser.add_argument 方法的type参数理论上可以是任何合法的类型, 但有些参数传入格式比较麻烦,例如list,所以一般使用bool, int, str, float这些基本类型就行了,更复杂的需求可以通过str传入,然后手动解析。bool类型的解析比较特殊,传入任何值都会被解析成True,传入空值时才为False

    python script.py --bool-val=0 # args.bool_val=True
    python script.py --bool-val=False # args.bool_val=True
    python script.py --bool-val=     # args.bool_val=什么都不写False

    通过这个方法还能指定命令的帮助信息。具体请看API文档:https://docs.python.org/2/library/argparse.html

     

    tf.app.run

    这个我暂时没用到,可以参考原文实现一下。

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/peanutk/p/11650796.html
Copyright © 2011-2022 走看看