精华内容
下载资源
问答
  • Python——命令行传参
    千次阅读
    2021-06-12 00:18:39

                                          Python——命令行传参

     

           Python 提供了 getopt 模块来获取命令行参数,也可以使用 sys 的 sys.argv 来获取命令行参数。本文介绍2种方式进行命令行传参。

     

    1、sys.argv传参——初级

    • sys.argv 是命令行参数列表。
    • len(sys.argv) 是命令行参数个数。

    注:sys.argv[0] 表示脚本名。 

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import sys
    
    print('参数个数为:', len(sys.argv), '个参数。')
    print('参数列表:', str(sys.argv))

    运行结果

    $ python test.py arg1 arg2 arg3
    参数个数为: 4 个参数。
    参数列表: ['test.py', 'arg1', 'arg2', 'arg3']

    sys.argv:以列表的方式获取运行 Python 程序的命令行参数存放其中。其中 sys.argv[0] 通常就是指该 Python程序本身,sys.argv[1] 代表第一个参数,sys.argv[2] 代表第二个参数,以此类推。类似于 Shell 中的 $0、$1、$2

     

    2、argparse传参——高级

    argparse的使用可以简化为以下四个步骤:

    • A. import argparse                                       # 在python文件中先导入该模块
    • B. parser = argparse.ArgumentParser()    # 创建一个解析对象
    • C. parser.add_argument()                           # 添加该解析对象中的参数和对应的命令表示
    • D. parser.parse_args()                                 # 调用解析方法

    demo如下:

    import argparse
    import time
    
    
    def parse_args():
        description = "你正在学习如何使用argparse模块进行命令行传参..."
        parser = argparse.ArgumentParser(description=description)
        parser.add_argument("-t", "--time", type=str, default=time.strftime("%Y%m%d", time.localtime()), help="%Y%m%d格式的时间")
        parser.add_argument("--query", type=str, default="welcome to argparse!", help="传入的文本")
        return parser.parse_args()
    
    
    if __name__ == "__main__":
        args = parse_args()
        print(args)
        print(type(args))
        print(args.time, args.query)

    运行结果:

    Namespace(query='welcome to argparse!', time='20210612')
    <class 'argparse.Namespace'>
    20210612 welcome to argparse!

    命令行运行结果

    $ python parse.py -h
    Namespace(query='welcome to argparse!', time='20210612')
    <class 'argparse.Namespace'>
    20210612 welcome to argparse!
    
    
    $ python parse.py
    Namespace(query='welcome to argparse!', time='20210612')
    <class 'argparse.Namespace'>
    20210612 welcome to argparse!
    
    
    $ python parse.py -t 20210610 --query 我想吃饭
    Namespace(query='我想吃饭', time='20210610')
    <class 'argparse.Namespace'>
    20210610 我想吃饭

     

    更多相关内容
  • 大多数项目都有生产环境和开发环境,一般情况下应该够了,但是有时候还需要sit,uat,本地等环境,这时候假如要通过注释的方式切换环境就相当麻烦了. 如果可以像下面这样切换环境就方便了 npm run serve //默认本地开发...
  • 命令行传参

    2021-09-29 10:59:53
    1:给args传参 ​ 2:找到Demo路径打开命令行窗口 3:javac 类名.java(编译写好的Demo) 4:因为有包结构所以直接执行它是不行的 5:将路径退回到src目录 6:这里记住因为有包结构所以要加上包的路径来执行它,...

    包结构

    在这里插入图片描述

    步骤

    1:给args传参

    在这里插入图片描述

    2:找到Demo路径打开命令行窗口

    3:javac 类名.java(编译写好的Demo)

    4:因为有包结构所以直接执行它是不行的

    5:将路径退回到src目录

    在这里插入图片描述

    6:这里记住因为有包结构所以要加上包的路径来执行它,后面加上你要给的参数

    在这里插入图片描述

    展开全文
  • python命令行传参

    2022-03-26 17:33:07
    python命令行传参 文章目录python命令行传参1、sys.argv + getopt传参2、argparse传参(建议,自带-h参数解析) 1、sys.argv + getopt传参 参考Python main函数、命名行参数 import sys, getopt #参考 ...

    python命令行传参

    1、sys.argv + getopt传参

    参考Python main函数、命名行参数

    import sys, getopt
    
    
    #参考 https://www.cnblogs.com/lwp-boy/p/13415886.html
    
    '''
    无名参数:
      执行程序必须给定的参数,且给定参数顺序固定。通过sys.argv获取,参数以空格区分,
    遇到空格就认为是一个参数,第一个参数sys.argv[0]为执行的脚本本身。
    
    带名参数:
    执行程序通过-或者--加参数名指定的参数,参数顺序无关,参数个数可动态变化,参数可带值也可不带值,通过getopt模块进行解析。
    
    函数原型:getopt(args, shortopts, longopts = [])
    
    参数说明:
        args 参数列表,及sys.argv参数,通常给值sys.argv[1:]
        shortopts 短字符标识,通过-标识的参数,每个标识只能是一个字符,如果参数需要带值,则在该字符后面加上:符号
        longopts 字符串标识,通过--标识的参数,每个参数为一个字符串,如果需要带值,则在该字符串后面加上=符号 
    
    参数描述:
        -h: 不带参数值
        -y: 不带参数值
        -x: 需要带参数值,方式: -x 10 (10为参数值)
        --help: 不带参数值
        --version: 需要带参数值, 方式 --version=v.1.1 (v.1.1为参数值)
    '''
    
    if __name__ == '__main__':
        opts, _ = getopt.getopt(sys.argv[1:], 'hyx:', ["help","version="])
        for opt,value in opts:
            if opt in ("-h","--help"):
                print("This is help")
    
            elif(opt == "-x"):
                print("x value is :",value)
    
            elif(opt == "-y"):
                print("This is y")
    
            elif opt == "--version":
                print("Version is :",value)
        pass
    

    2、argparse传参(建议,自带-h参数解析)

    参考

    import argparse
    
    # 参考 https://blog.csdn.net/lanzheng_1113/article/details/77574446
    # 参考 https://docs.python.org/zh-cn/3/library/argparse.html
    
    ''' 
            argparse自带-h参数解析 : 
                python code002_argvparse.py -h 
                    usage: code002_argvparse.py [-h] [-a PARAM_A] [-v VERSION]
                                [-m {pth1,pth2,pth3}] [-r | -l]
    
                    show example
                    
                    optional arguments:
                      -h, --help            show this help message and exit
                      -a PARAM_A, --param_a PARAM_A
                                            help of param_a
                      -v VERSION, --version VERSION
                                            help of version
                      -m {pth1,pth2,pth3}, --mode {pth1,pth2,pth3}
                                            help of version
                      -r, --remote          remote mode
                      -l, --local           local mode
    
            
                
                python code002_argvparse.py --param_a=1.25635 -v="0.1.0"
                    设置了param_a值为:1.25635
                    设置了version值为:0.1.0
                    设置了mode值为:pth1
        '''
    
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser(description="show example")  # 这一行是argparse的构造函数,当其中description参数指定了当用户敲入-h时显示的模块介绍。
        parser.add_argument("-a", "--param_a", type=float, default=1.25,  help="help of param_a")  # 这个函数用于添加可解析的参数,其中action=store_true的意义是如果使用了这个参数则值默认为TRUE。
        parser.add_argument("-v", "--version", type=str,  default="version", help="help of version")
        parser.add_argument("-m", "--mode", type=str,  default="pth1", choices=['pth1', 'pth2', 'pth3'], help="help of version")
        exptypegroup = parser.add_mutually_exclusive_group()  #这个函数添加一组互斥的选项,如上例中的-l和-r只能用一个。
        exptypegroup.add_argument("-r", "--remote", help="remote mode", action="store_true")
        exptypegroup.add_argument("-l", "--local", help="local mode", action="store_true")
        ARGS = parser.parse_args()
        if ARGS.param_a:
            print(u"设置了param_a值为:" + str(ARGS.param_a))
        if ARGS.version:
            print(u"设置了version值为:" + str(ARGS.version))
        if ARGS.mode:
            print(u"设置了mode值为:" + str(ARGS.mode))
    
    展开全文
  • Python 命令行传参

    千次阅读 2021-12-01 15:04:44
    Python 命令行传参 说到 python 命令行传参,可能大部分人的第一反应就是用 argparse。的确,argparse 在我们需要指定多个预设的参数(如深度学习中指定模型的超参数等)时,是非常有用的。但是如果有时我们只需要一...

    Python 命令行传参

    说到 python 命令行传参,可能大部分人的第一反应就是用 argparse。的确,argparse 在我们需要指定多个预设的参数(如深度学习中指定模型的超参数等)时,是非常有用的。但是如果有时我们只需要一个参数,那么再解析一整套 argparse 稍显笨重。本文除了介绍 argparse 之外,也会介绍一些简单轻便的命令行传参方法。

    sys

    我们在学习 C/C++ 时知道主函数 main 需要传入三个参数:

    int main(int argc, char* argv[], char* env[]) {}
    

    其中第三个参数是环境变量,大部分时候我们不写在程序里,即一般有:

    int main(int argc, char* argv[]) {}
    

    关于这几个参数包括环境变量参数更深入的解释可参考:Linux中 C++ main函数参数argc和argv含义及用法12 [虚拟化] 进程抽象;fork,execve,exit

    简单来说,这里的 argc 和 argv 分别是传入参数的个数,和传入的参数列表。这里传入的参数,就是可以在命令行中传递的。

    在 python 中,我们当然同样可以用这种方式来传递命令行参数,这里我们需要借助内置的 sys 库。

    直接上代码:

    import sys
    
    print(f'参数个数:{len(sys.argv)}')
    print(f'参数列表:{str(sys.argv)}')
    

    然后我们在命令行运行,并传入几个参数:

    python test.py arg1 arg2
    

    输出为:

    参数个数:3
    参数列表:['test.py', 'arg1', 'arg2']
    

    注意这里没有所谓的 sys.argc,而是通过取参数列表的长度来获得参数的个数 len(sys.argv)。

    这种方式获取几个命令行参数有时是非常方便的。比如有时我们写了一个脚本,要将目标检测数据集中某一张图像的检测框画出来查看,但是想要每次查看不同的图像。就可以通过这种方式在运行脚本时通过命令行传参。

    # draw_box.py
    import sys
    
    def draw_box(image_name):
      # ...
      pass
    
    if __name__ == "__main__":
      draw_box(sys.argv[1])
    

    这样在运行时直接在命令行中:

    python draw_box.py 12345.jpg
    

    getopt 模块

    getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式 - 和长选项模式

    该模块提供了两个方法及一个异常处理来解析命令行参数。

    getopt.getopt 方法

    getopt.getopt 方法用于解析命令行参数列表,语法格式如下:

    getopt.getopt(args, options[, long_options])
    

    方法参数说明:

    • args: 要解析的命令行参数列表。
    • options : 以字符串的格式定义,options 后的冒号 : 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
    • long_options : 以列表的格式定义,long_options 后的等号 = 表示该选项必须有附加的参数,不带等号表示该选项不附加参数。
    • 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 的参数。

    另外一个方法是 getopt.gnu_getopt,这里不多做介绍。

    Exception getopt.GetoptError

    在没有找到参数列表,或选项的需要的参数为空时会触发该异常。

    异常的参数是一个字符串,表示错误的原因。属性 msgopt 为相关选项的错误信息。

    argparse

    最后是大家最熟悉的 argparse,由于它功能强大且复杂,这里就介绍几个最常用的方式。

    # test_argparse.py
    import argparse
    
    parser.add_argument('--representation_size', type=int, default=768)
    parser.add_argument('--batchSize', type=int, default=32, help='batch size')
    parser.add_argument('--epochs', type=int, default=100, help='epochs')
    parser.add_argument('--num_workers', type=int, default=20, help='num workers')
    parser.add_argument('--tbx', default='debug', help='the name of dir to store data for tensorboard')
    parser.add_argument('--gpu_id', default='0', help='gpu id')
    parser.add_argument('--load_path', type=str, default='')
    parser.add_argument('--lr', type=float, default=5e-3, help='learning rate')
    parser.add_argument('--lr_decay', type=float, default=1., help='gamma of learning rate decay')
    parser.add_argument('--p', type=float, default=0.75, help='p of drop out')
    
    parser.add_argument('--freeze-features', action="store_true")
    
    
    args = parser.parse_args()
    print(args.accumulate(args.integers))
    

    在导入 argparse 之后分以下几步:

    1. 先建立一个 parser 对象
    2. 然后通过 add_argument 加入所需要的参数
    3. 最后通过调用 parser 对象的 parse_args 方法来将参数解析,并赋值给 args

    之后就可使用添加的参数(如 args.integer)了。

    在命令行传参时需:

    python test_argparse.py --batchSize 64 --num_workers 12 --freeze-features
    

    若未传参,则按照设置的 default 赋值。

    Ref:

    https://www.runoob.com/python/python-command-line-arguments.html

    https://docs.python.org/zh-cn/3/library/argparse.html

    展开全文
  • Java命令行传参

    2021-11-04 21:22:00
    Java命令行传参 Java的程序运行时,是可以靠命令行给main()函数传参的 主函数中的参数String[] args就是可以向主函数传参的接口: public class study { public static void main(String[] args) { //函数体内部就...
  • 命令行传参 有时候我们希望运行一个程序的时候再给它传递信息,这就要靠传递命令行参数给main()函数实现 命令行传参演示: 代码: public class CommandLine{ public static void main(String args[]){ //...
  • 背景 因为有写配置是动态的,比如通过配置文件取得,或者通过命令行参数取得,或者通过环境变量取得等等一些情况,这时候就需要动态的修改一些配置了。 外置配置文件读取
  • 命令行传参 有时候你希望在运行一个程序的时候,再给他传递消息。这要靠传递命令行参数给main()函数实现。 public class demon1{ public static void main(String[] args) { //args.length 数组长度 for (int i ...
  • lua:63:bad argument #1 to ‘svc_get_table_value’ (number expected,got nil) 表示在function_test.lua这个函数中第63行的svc_get_table_value函数中第一个传参应该是number,但是传了个nil值 lua脚本调试: if ...
  • 前言 命令行参数是根据命令行选项将不同的值...1.首先需要在conftest.py添加命令行选项,命令行传入参数"–cmdopt",用例如果需要到从命令行传入的参数,就调用cmdopt函数: #conftest.py import pytest def pytest_
  • 1、首先需要在conftest.py添加命令行选项,命令行传入参数”--cmdopt“, 用例如果需要用到从命令行传入的参数,就调用cmdopt函数: #conftest.py #!/usr/bin/python # -*- coding:utf-8 -*- import pytest def ...
  • 命令行传参给logback 第一种是使用 ${} 来动态读取系统命令行参数来指定日志输出路径 <property name="LOG_FILE" value="${BUILD_FOLDER:-logs}"/> 默认在项目的根目录下生成日志文件,可以通过 java -jar ...
  • java在IDEA中通过命令行传参 1.在IDEA中打开对应的java文件的命令行Terminal,先输入javac Demo4.java先来编译文件,生成class文件 2.java Demo4 找不到或无法加载主类,这个问题需要退到你包外再执行,通过cd …/退...
  • shell脚本给C程序传参最常用的方法有两种,在执行C程序时使用命令行传参,要求命令行参数的位置固定(在C程序中不加入额外参数标识解析模块情况下),另外一种方法相对灵活,即使用环境变量的方式进行传参。...
  • 命令行传参 一、说明 有时候希望运行一个程序时候再传递给它消息,这要考传递命令行参数给main()函数实现。 二、主要学习的目的 了解命令行传参,是可以在主函数中进行参数传递的,是通过数组的形式进行传递。 ...
  • Idea实现命令行传参

    2021-01-10 16:36:06
    实现的功能将输入的字符串返回 package step1.grammar.day2; public class CmdTransmit { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args["+i...
  • 解决ffmpeg windows命令行传回车换行符的问题
  • Java命令行传参*

    2022-02-11 18:39:25
    命令行传参* 利用String类的args [ ]数组接受数据 代码: public class Demo05 { //命令行传参 public static void main(String[] args) { //args.length 数组长度 for (int i = 0; i < args.length; i++) {...
  • Shell脚本命令行传参

    2020-08-18 15:18:49
    1. Shell 特殊参数解释 # echo $0 # 当前脚本的文件名(间接运行时还包括绝对路径)... do echo $i done #传参打印 if [ ! -n "$1" ] then echo "参数为空" else echo "第1个参数为:$1"; fi echo "第2个参数为:$2";

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,961
精华内容 7,184
关键字:

命令行传参