python中的argparse

因为平常用python命令行给不多,所以也只是知道有argparse这个库,现在遇到了看了下。实现基本的功能还是比较简单的。

一、argparse介绍

argparse是python的一个用于命令行选项和参数解析的模块。本质上是用sys.argv从命令行语句中解析出命令行参数,然后自动生成帮助和使用信息。

参考官方链接:Argparse Tutorial — Python 3.9.6 documentation

二、 argparse简单使用

1、argparse使用流程:

  • 导入argparse

    import argparse
    
  • 创建一个解析对象.

    parser = argparse.ArgumentParser()
    # ArgumentParser()是命令行解析的入口
    
  • 向对象中添加你要关注的命令行参数

    parser.add_argument()
    # 可以定义命令行参数,参数的帮助信息,参数的输入类型等等
    
  • 进行解析

    parser.parse_args()
    # 进行解析
    
  • 实现功能

2、举例

下面是一个简单的例子,大致为在命令行调用该test.py脚本,输入一个数字,输出该数字的平方

import argparse

# 创建解析对象,并添加描述信息
parser = argparse.ArgumentParser(description = "输出数字的平方") 
# 添加命令行参数“square",还有该参数的帮助信息,参数类型
parser.add_argument("square", help="display a square of a given number"type = int)
# 进行解析
args = parser.parse_args()
# 实现功能
print(args.square**2)

使用windows+r打开cmd,输入

python test.py -h

得到如下帮助信息,-h也是命令行参数。(-h是短选项,–help是长选项,使用是一样的。):

usage: test.py [-h] square

输出数字的平方

positional arguments:
  square      display a square of a given number

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

帮助信息中除了描述信息外,还有两项,一项是”positional arguments“,另一项是”optional arguments“。

  • positional arguments是位置参数,参数前不加任何前缀,是必须配置的参数。也就是说必须按顺序配置这个参数,如果没有配置就会报错。当有多个位置参数时,则要按顺序依次输入,位置顺序要保持一致!

使用:

python command.py 配置的位置参数

例如上述平方的例子,则有

python test.py 3
输出结果为:9
  • optional arguments是可选参数,参数前加前缀“-”为短选项,加“–”为长选项。 使用的时候为:
python command.py  可选参数 配置的可选参数

将上面的例子更改一下

import argparse

parser = argparse.ArgumentParser(description = "输出数字的平方") 
parser.add_argument('-s', "--square", help="display a square of a given number"type = int)
args = parser.parse_args()
print(args.square**2)

则命令行语句为

python test.py -s 3
或者
python test.py --square 3

3、比较有意思的东西

一个数字的平方用命令行语句好像有点大题小作了,毕竟明明一个计算器能解决的问题为啥要费这么大的功夫?但是如果输入是一个文件,这才有点意义。

import sys
import argparse
import os.path

def main():
    
      parser = argparse.ArgumentParser()
      # 输入文件的参数
      parser.add_argument('-i', "--inputFile", help = "Input file path")
      # 输入数字的参数
      parser.add_argument('-s', "--square", 
                          help = "display a square of a given number", 										  type = int)
      # 输出文件的参数
      parser.add_argument('-o', '--outputFile', help = "output file path")
      args = parser.parse_args()
      
      # 如果输入的是数字
      if args.square:
            print(args.square**2)
            sys.exit(1)
      
      # 如果输入的是文件,但是文件不存在
      if args.inputFile and not os.path.isfile(args.inputFile):
            sys.stderr.write('Input file {0} doesn\'t exist!\n'.
                             format(args.inputFile))
            sys.exit(1)
      
      # 如果输出是文件,但是文件已经存在
      if args.outputFile and os.path.isfile(args.outputFile) and not args.overwrite:
            sys.stderr.write('Output file {0} already exists!' .
                             format(args.outputFile))
            sys.exit(1)
      
      if args.outputFile:
            output_fp = open(args.outputFile, 'w')
      else:
            output_fp = sys.stdout
  
	  # 实现功能
      with open(args.inputFile, 'r') as fp:
            for line in fp:
                  answer = int(line)**2
                  output_fp.write(str(answer) + '\n')


if __name__ == '__main__':
      main()

然后就可以使用啦

假设输入是1.txt,里面有

1
2
3
4
5

命令行:

python test.py -i 1.txt -o 2.txt

就能得到2.txt,

1
4
9
16
25

当然,因为我们设定的是可选参数,那么我们不指定输出文件,那么输出就会显示在窗口中。当然最好是指定输出文件,这样也方便用管道。

4、更有意思了

我觉得这样命令行输入命令还不是很方便,尤其对于根本不知道命令行是什么玩意儿的外行。我们还能将命令行做成可执行文件。

这就需要用到一个库——“pyinstaller"。pyinstaller是一个第三方库,可将脚本.py文件打包为.exe可执行文件。当然这个库要自己安装一下,也很简单,直接在命令行输入

 pip install pyinstaller

安装好之后将脚本文件放入一个文件夹内,打开这个文件夹,在命令行输入

pyinstaller -F test.py

等待完成之后,文件夹里有个dist文件夹,里面就有test.exe可执行文件了。

然后新建一个文档,输入

.\test.exe -i "%1" -o 2.txt

将文档另存为.bat批处理文件,就大功告成了!

随意拉一个txt文件放到.bat批处理文件上,就可以得到想要的结果了,是不是很方便!

注: 以上只是我初学argparse学到的,其实argparse.ArgumentParser()和 parser.add_argument()两个命令有很多的参数,能做到得远不止本文。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值