Python 获取命令行参数

标签: Python 命令行参数
6人阅读 评论(0) 收藏 举报
分类:

一、sys 模块

在 Python 中,通过 sys 模块中的 sys.argv 可以访问到所有的命令行参数,它的返回值是包含所有命令行参数的列表。

  • sys.argv :是命令行参数列表

  • len(sys.argv) :是命令行参数个数

  • sys.argv[0]:参数1

  • sys.argv[1]:参数2

实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@Time    : 2018-04-11 17:58
@Author  : jianjun.wang
@Email   : alanwang6584@gmail.com
"""

import sys

def main():
    print 'arg num : ', len(sys.argv)
    print 'args : ', sys.argv
    print 'script name : ', sys.argv[0]

    for i in range(len(sys.argv)):
        print "arg[{0}] = {1}".format(i, sys.argv[i])

if __name__ == "__main__":
    main()

命令行中输入:python D023_get_arg_sys.py alan 3

输出

arg num :  3
args :  ['D023_get_arg_sys.py', 'alan', '3']
script name :  D023_get_arg_sys.py
arg[0] = D023_get_arg_sys.py
arg[1] = alan
arg[2] = 3

二、getopt 模块

有时候我们需要传递多个参数,每个参数表示不同的含义,而且有时候有的参数有,有的参数没有。比如我们需要从打点文件(file)中分析某国家(country)某个版本(version)的统计结果,可以看到这里有四个参数:脚本名、file、country、country,但有时可能从文件中查某版本的(只有 脚本名、file、version 参数),或查某国家的(脚本名、file、country 参数),这时用 sys 模块就比较麻烦了,因为,第三个参数有可能是 country、也可能是 version,也可能都没有(如分析该文件中所有国家所有版本的数据)。这时用 getopt 就可以很好的解决这个需求。

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

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

getopt.getopt 方法

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

options, args = getopt.getopt(args, shortopts, longopts=[])

方法参数说明:

  • shortopts:短格式参数串。shortopts 后的冒号(:)表示如果设置该选项,必须有附加的参数,不带冒号表示该选项没有附加参数如:"h f: v:"h 后面没有冒号,表示该选项没有附加参数,如用于输出命令用法f 和 v 后面带有冒号,表示该选项有附加参数

  • longopts:长格式参数列表。longopts 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就没有附加参数如:["help", "file=", "version="]help 后面没有等号,表示该选项没有附加参数file 和 version 后面带冒号,表示如果设置该选项,必须有附加参数

  • longopts: 以列表的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。

  • 返回值含义options:元组列表,每个元组的形式为:(选项, 附加参数),如:('-f', 'data.csv')args:包含那些没有 '-' 或 '--' 的参数列表

  • 异常: getopt.GetoptError:在没有找到参数列表,或选项的需要的参数为空时会触发该异常 异常的参数是一个字符串,表示错误的原因,属性 msg 和 opt 为相关选项的错误信息

实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@Time    : 2018-04-11 19:26
@Author  : jianjun.wang
@Email   : alanwang6584@gmail.com
"""

import sys
import getopt

def main(args):
    file=''
    country=''
    version=''

    """
        语法格式:
        options, args = getopt.getopt(args, shortopts, longopts=[])

        参数含义:
        args:要解析的命令行参数列表,sys.argv[1:],过滤掉 sys.argv[0],它是执行脚本的名字,不算命令行参数
        shortopts:短格式参数串。shortopts 后的冒号(:)表示如果设置该选项,必须有附加的参数,不带冒号表示该选项没有附加参数
                如:"hf:v:"
                h 后面没有冒号,表示该选项没有附加参数,如用于输出命令用法
                f 和 v 后面带有冒号,表示该选项有附加参数
        longopts:长格式参数列表。longopts 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就没有附加参数
                如:["help", "file=", "version="]
                help 后面没有等号,表示该选项没有附加参数
                file 和 version 后面带冒号,表示如果设置该选项,必须有附加参数

        返回值含义:
        options:元组列表,每个元组的形式为:(选项, 附加参数),如:('-f', 'data.csv')
        args:包含那些没有 '-' 或 '--' 的参数列表

        异常: 
        getopt.GetoptError:在没有找到参数列表,或选项的需要的参数为空时会触发该异常
        异常的参数是一个字符串,表示错误的原因,属性 msg 和 opt 为相关选项的错误信息

    """
    try:
        options, args = getopt.getopt(args, "hf:c:v:", ["help", "file=", "country=", "version="])
    except getopt.GetoptError:
        print 'Error: get_args.py -f <file> -c <country> -v <version>'
        print '   or: get_args.py --file=<file> --country=<country> --version=<version>'
        sys.exit(2)

    for opt, arg in options:
        if opt in ("-h", "--help"):
            print 'get_args.py -f <file> -c <country> -v <version>'
            print 'or: get_args.py --file=<file> --country=<country> --version=<version>'
            sys.exit()
        elif opt in ("-f", "--file"):
            file = arg
        elif opt in ("-c", "--country"):
            country = arg
        elif opt in ("-v", "--version"):
            version = arg

    for i in range(0, len(args)):
        print "args[{0}] = {1}".format(i, args[i])

    print 'file : ', file
    print 'country : ', country
    print 'version : ', version



if __name__ == "__main__":
    # 注意这里要排除 argv[0],它是本脚本名,不算做命令行参数
    main(sys.argv[1:]) 
短参数测试

命令行中输入:

python D023_get_args_getopt.py -f data.csv -c china -v 6.3.2 a 2

输出:

args[0] = a
args[1] = 2
file :  data.csv
country :  china
version :  6.3.2
长参数测试

命令行中输入:

python D023_get_args_getopt.py --file=data.csv --country=china --version=6.3.2 a 3

输出:

args[0] = a
args[1] = 3
file :  data.csv
country :  china
version :  6.3.2

查看评论

【Python】第二周Python基础(下)

本周课程主要讲解Python的面向对象编程, 异常处理、模块、MySQL数据库、Python的数据库支持以及图形用户界面等技术,最后我们使用阶段案例开发了一个《飞机大战》的游戏。
  • 2018年03月16日 11:34

Python:读取命令行参数

如题。
  • qcyfred
  • qcyfred
  • 2017-09-10 12:40:14
  • 719

【Python】Python获取命令行参数

有时候需要用同一个Python程序在不同的时间来处理不同的文件,此时如果老是要到Python程序中去修改输入、输出文件名,就太麻烦了。而通过Python获取命令行参数就方便多了。下面是我写得一个小程序...
  • xiaoguaihai
  • xiaoguaihai
  • 2014-06-17 20:27:58
  • 13348

Python 获得命令行参数的方法

本篇将介绍python中sys, getopt模块处理命令行参数 如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 需要模块:sys ...
  • beyondlpf
  • beyondlpf
  • 2014-03-31 16:44:13
  • 4349

编写带命令行参数的 Python 程序

我们在安装一些 Python 程序的时候经常会输入这样的命令行语句 python setup.py install,从这条语句中我们可以看到 setup.py 是一个 Python 程序,但是其中的 ...
  • luoyhang003
  • luoyhang003
  • 2016-02-27 15:29:33
  • 12285

python添加命令行参数和异常处理

异常处理+命令行解析库argparse Socket.error 与一般I/O和通信问题有关的 Socket.gaierror 与查询地址有关的 Socket.herror 与其他地址错...
  • djd1234567
  • djd1234567
  • 2015-04-25 21:09:50
  • 1381

【Python学习 】Python获取命令行参数的方法

背景 最近编写一个python程序的时候,需要去获取python命令行的参数,因此这里记录下如何获取命令行参数的方法。 一、sys 模块 在 Python 中,sys 模块是一个非常常用且十...
  • qq446282412
  • qq446282412
  • 2018-02-27 20:18:42
  • 181

python 命令行参数

  • 2012年03月11日 20:44
  • 219KB
  • 下载

python的命令行参数处理

Python 命令行参数 篇头感想:Python的两种获取命令好的方法,一种是直接通过sys.argv和getopt包中的类解析方法。从使用角度上看。getopt更适合Python正...
  • yohoph
  • yohoph
  • 2016-06-16 10:39:36
  • 1043

获取命令行参数的各种变化

常,在VC++中获取命令行参数的有如下几种方式:   在控制台程序中: C++运行时库通过入口函数main传递进来的参数int argc 和 char* argv[]。其中第二个参数...
  • njcyp123456789
  • njcyp123456789
  • 2016-12-12 22:15:52
  • 616
    个人资料
    等级:
    访问量: 2万+
    积分: 396
    排名: 18万+
    最新评论