用python命令行来做一个计算器:Argparse教程

本文介绍了如何使用Python的argparse模块创建命令行计算器,展示了如何处理位置参数、可选参数、短选项以及冲突选项,提供了一个简易计算器的实现,帮助开发者更好地理解和运用argparse。
摘要由CSDN通过智能技术生成

前言

通常,使用python命令行的情况是运行某个文件,比如python hello.py,之后会在终端上看到hello.py文件的输出结果。但如果每次运行py文件时,需要对其中的某些变量赋值,比如我想运行一个py文件,做一个简单的加法运算:python sum.py 1 2,希望得到结果为3。

sys.argv

应该如何来编写可以接受从命令行进行赋值的加法脚本?
一种可行的代码如下:

import sys

args = sys.argv
print(sum(map(int,args[1:])))

在这里插入图片描述
sys.argv的值是python后面的所有值组成的一个列表,上面的例子中,args =['sum.py', '1','2'],所以这个例子还可以接受更多的参数,比如python sum.py 1 2 3 4 5 6,结果为21。
在这里插入图片描述
通过这种方式可以自定义python的命令行,不过这篇文章的主角不是sys.argv,接下来看看更炫酷的python命令行吧!

argparse

使用python sum.py 1 2 3 4 5 6运行下列代码可以得到与上述代码相同的结果

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('integers', metavar='int', nargs='+', type=int, help='一个整数')
args = parser.parse_args()
print(sum(args.integers))

正常情况下,结果是一样的,但argparse可以提供更多的信息。如果输入错误,会得到详细的错误信息:
在这里插入图片描述
输入python sum.py -h可以得到详细的帮助信息:
在这里插入图片描述
接下来试试写一个命令行版本的简易计算器,支持加减乘除:

from functools import reduce
import argparse

parser = argparse.ArgumentParser(description='一个简易计算器,支持加减乘除')
parser.add_argument('integers', nargs='+', type=int, help='一个整数')
parser.add_argument('-a','--add',help='加法')
parser.add_argument('-s','--subtract',help='减法')
parser.add_argument('-m','--multiply',help='乘法')
parser.add_argument('-d','--divide',help='除法')

def add(args):
    print(sum(args))

def substract(args):
    print(reduce(lambda x,y:x-y, args))

def multiply(args):
    print(reduce(lambda x,y:x*y, args))

def divide(args):
    print(reduce(lambda x,y:x/y, args))

args = parser.parse_args()
if args.subtract:
    substract(args.integers)
elif args.multiply:
    multiply(args)
elif args.divide:
    divide(args)
else:
    add(args)

在这里插入图片描述
这样一个简单的计算器就搞定了。简单介绍一下里面用到的参数:

nargs='+'表示参数个数为2个或以上,*表示任意个,默认为1个参数;

'-a','--add',help='加法'表示缩写为a,完整格式为add,显示帮助信息为“加法”;

type=int表示将数据转换为int,没有此属性时默认为str。

进阶

官方文档中有比较详细的解释。接下来是搬运内容:

Argparse 教程

作者
Tshepang Lekhonkhobe

这篇教程旨在作为 argparse 的入门介绍,此模块是 Python 标准库中推荐的命令行解析模块。

注解 还有另外两个模块可以完成同样的任务,称为 getopt (对应于 C 语言中的 getopt() 函数) 和被弃用的 optparse。还要注意 argparse 是基于 optparse 的,因此用法与其非常相似。

概念

让我们利用 ls 命令来展示我们将要在这篇入门教程中探索的功能:

$ ls
cpython  devguide  prog.py  pypy  rm-unused-function.patch
$ ls pypy
ctypes_configure  demo  dotviewer  include  lib_pypy  lib-python ...
$ ls -l
total 20
drwxr-xr-x 19 wena wena 4096 Feb 18 18:51 cpython
drwxr-xr-x  4 wena wena 4096 Feb  8 12:04 devguide
-rwxr-xr-x  1 wena wena  535 Feb 19 00:05 prog.py
drwxr-xr-x 14 wena wena 4096 Feb  7 00:59 pypy
-rw-r--r--  1 wena wena  741 Feb 18 01:01 rm-unused-function.patch
$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
...

我们可以从这四个命令中学到几个概念:

ls 是一个即使在运行的时候没有提供任何选项,也非常有用的命令。在默认情况下他会输出当前文件夹包含的文件和文件夹。

如果我们想要使用比它默认提供的更多功能,我们需要告诉该命令更多信息。在这个例子里,我们想要查看一个不同的目录,pypy。我们所做的是指定所谓的位置参数。之所以这样命名,是因为程序应该如何处理该参数值,完全取决于它在命令行出现的位置。更能体现这个概念的命令如 cp,它最基本的用法是 cp SRC DEST。第一个位置参数指的是你想要复制的,第二个位置参数指的是你想要复制到的位置

现在假设我们想要改变这个程序的行为。在我们的例子中,我们不仅仅只是输出每个文件的文件名,还输出了更多信息。在这个例子中,-l 被称为可选参数。

这是一段帮助文档的文字。它是非常有用的,因为当你遇到一个你从未使用过的程序时,你可以通过阅读它的帮助文档来弄清楚它是如何运行的。

基础

让我们从一个简单到(几乎)什么也做不了的例子开始:

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

以下是该代码的运行结果:

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

options:
  -h, --help  show this help message and exit
$ python3 prog.py --ve
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 70
    评论
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D_ry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值