美文网首页
处理命令行参数

处理命令行参数

作者: 运维开发_西瓜甜 | 来源:发表于2020-03-30 18:17 被阅读0次

argparse 模块是标准库中最大的模块之一,拥有大量的配置选项。 本章只是演示了其中最基础的一些特性。

一、基本步骤

为了解析命令行选项
你首先要创建一个 ArgumentParser 实例, 并使用 add_argument()方法声明你想要支持的选项。

没用的示例

必须创建一个py 文件 prog.py , 并写入如下内容

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

试着在命令行里执行如下代码

$ python3 prog.py --help
usage: prog.py [-h]

optional arguments:
  -h, --help  show this help message and exit


可以看到,即使没有做太多设置,这个脚本已经实现了命令行工具了,并且默认就会有 --help 参数。
--help 也可以简写为 -h

二、添加必须的位置参数

位置参数就是,必须为程序提供的,并且不需要使用 ---

继续编辑我们的 prog.py 文件。
这次我们可以使用实例的 add_argument() 函数来添加一个位置参数。
这个位置参数是必须的,不给其传参,将会抛出一个错误提示。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("show")
args = parser.parse_args()
print(args.show)

上面的代码中, 字符串的 'show' 被传给 add_argument() 方法。
最后他会变成实例的一个属性,用来接收在命令行里传入的实际的值。
最后一行我们打印了这个属性,也就可以实现打印出命令行里传入的实际的值了。

我们来执行一下

$ python3 prog.py hello
hello

这个时候使用 --help,你会发现帮助信息并没有表明目前的这个位置参数是用来做什么的。

$ python3 prog.py --help
usage: prog.py [-h] show

positional arguments:
  show

optional arguments:
  -h, --help  show this help message and exit

所以,接下来我们就来添加位置参数的帮助信息

使用 help 默认参数 添加帮助信息

$ cat prog.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("show", help="打印出你输入的字符串")
args = parser.parse_args()
print(args.show)

再次执行,会看到我们添加的帮助信息

$ python3 prog.py -h
usage: prog.py [-h] show

positional arguments:
  show        打印出你输入的字符串

optional arguments:
  -h, --help  show this help message and exit

添加更多的逻辑

我们可以在执行了 parser.parse_args() 之后,添加更多的逻辑,用于实现更多的功能。
比如,下面的示例计算 2 的任意次方。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square",
                    type=int,
                    help="打印出 2 的幂值, 要求传入一个整数")
args = parser.parse_args()
print(2 ** args.square)

这里因为是算术运算,所以需要用 type=int 把传入的参数声明为整型,这样接收到参数后模块内部会自动转换为整型。

执行结果如下:

$ python3 power.py 4
16

实战-制作一个 copy 命令行工具

为了展示位置参数(Positional arguments),下面写一个cp.py,实现简单的文件复制功能。

import argparse
import shutil


def _parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "source",
        help="指定要复制的文件,支持相对路径和绝对路径",
    )
    parser.add_argument(
        "target",
        help="指定要复制的路径,包括拷贝后的文件名",
    )
    return parser.parse_args()


if __name__ == '__main__':
    args = _parse_args()
    shutil.copy(src=args.source, dst=args.target)

cp.py命令后,第一个参数被识别为source,第二个参数被识别为target,然后执行复制。

如果执行python cp.py cp.py cp2.py,那么不会有任何显示信息,说明成功执行复制操作。

如果多一个或者少一个参数呢?

$ python3 cp.py one.py
usage: cp.py [-h] source target
cp.py: error: the following arguments are required: target

$ python3 cp.py one.py two.py three.py
usage: cp.py [-h] source target
cp.py: error: unrecognized arguments: three.py

这就比直接使用sys.argv的可靠性要高多了。

注意这里并没有对源文件是否存在进行检测。

三、可选参数

可选参数就是可有可无的参数,一般用 - 或者 --表示。

可选参数就是需要使用 - 或者 -- 后面紧跟的是一个关键字。比如 -h也称为短参数 ,--help也称为长参数。

这个两种可以同时存在于程序中,也可以只出现一种。

让我们继续改写 cp.py 程序,让其具有查看版本的参数 -v--version

import argparse
import shutil


def _parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "source",
        help="指定要复制的文件,支持相对路径和绝对路径",
    )
    
    parser.add_argument(
        "target",
        help="指定要复制的路径,包括拷贝后的文件名",
    )
    
    parser.add_argument(
        '-v',
        '--version',
        action='version',  # 遇到参数时的动作,默认值 store
        version='%(prog)s 1.1',  ## 实际打印出来的内容
        help='查看程序版本',

    )
    return parser.parse_args()


if __name__ == '__main__':
    args = _parse_args()
    shutil.copy(src=args.source, dst=args.target)
$ python3 cp.py  -v
cp.py 1.1

相关文章

  • 常用的npm包

    命令行参数处理 nodejs 脚本,命令行参数处理,接受参数parse 可以使用 minimist 参数提示 co...

  • 九、处理用户输入

    简单目录 1.命令行参数 2.处理命令行选项和命令行参数参数 3.read命令获取用户输入 1.命令行参数 在命令...

  • 另一个go命令行参数处理器 - cmdr

    cmdr 是另一个命令行参数处理器。 Golang 自己带有 flags 进行命令行参数处理,算是便利的,然而和 ...

  • Python 获得命令行参数的方法

    Python 获得命令行参数的方法 本篇将介绍python中sys, getopt模块处理命令行参数 如果想对py...

  • 【Python的小技巧(二)】getopt库实现脚本传入参数

    简介 getopt模块用于解析脚本参数,该模块是专门用来处理命令行参数的 解析命令行选项及参数列表 args:要解...

  • GetoptLong简单例子

    1 GetoptLong GetoptLong主要是用来处理命令行参数。 示例代码: 命令行调用: 执行结果:

  • Node.js编程快餐(2) - 处理命令行参数

    处理命令行参数 我们要用Node.js写脚本的话,第一件事要处理的就是命令行参数。 就像下面的C++代码一样,命令...

  • 处理命令行参数

    argparse 模块是标准库中最大的模块之一,拥有大量的配置选项。 本章只是演示了其中最基础的一些特性。 一、基...

  • python argparse基本用法总结

    argparse模块是命令行参数解决包,可以很方便的接收从命令行传过来参数,也可以对传过来的参数进行定制化处理。原...

  • decopt库

    Decopt库是专门用于处理命令行参数,这样你就不用在代码里自己编写参数来处理程序的`**kwargs``了。 库...

网友评论

      本文标题:处理命令行参数

      本文链接:https://www.haomeiwen.com/subject/dhtbuhtx.html