从零开始:用 Python 打造你的第一个 CLI 应用!🎉

375 阅读6分钟

终端?CLI?它们到底有啥用?🤔

朋友们,你们有没有这样的经历——在电视剧里看到黑客们敲着密密麻麻的代码,屏幕上疯狂滚动着指令,看起来就像是掌控世界的样子?😎 其实,那些神秘的窗口,就是 命令行终端,而他们运行的,就是CLI(Command Line Interface,命令行界面)应用

CLI 应用的本质,就是一个可以在终端里运行的程序,你可以用它来执行各种任务,比如管理文件、运行服务器、查询天气,甚至写个计算器来帮你算账!今天,花姐就来手把手教你,用 Python 写一个简单但超实用的 CLI 计算器,让你轻松踏入 CLI 世界的大门!🚀


一、CLI 应用的基本组成部分

要理解 CLI 应用,我们得搞清楚几个关键概念:

命令(Command):就是你在终端里敲的指令,比如 gitlspython 这些都是命令。
子命令(Subcommand):有些命令可以带不同的子命令,比如 git commit 中的 commit,就是 git 这个命令的一个子命令。
参数(Arguments):用户输入的额外信息,比如 git commit -m "提交说明" 里的 "提交说明" 就是参数。
选项(Options/Flags):用来调整命令行为,比如 -mgit commit 的一个选项。

今天,我们就来创建一个 Python CLI 计算器,它会支持四种运算:加、减、乘、除,并且可以通过命令行参数来指定计算内容!📊


二、项目结构:该怎么组织文件?📁

在开始写代码之前,我们先确定项目结构,这样代码更清晰,后期维护也更方便。

cli_calculator/
├── cli_calculator/
│   ├── calculator.py  # 计算器核心逻辑
│   ├── __init__.py    # 让 Python 把这个文件夹当作模块
│   └── __main__.py    # CLI 入口文件
├── README.md         # 项目介绍
├── requirements.txt  # 依赖库
└── setup.py          # 打包和安装配置

其中:

  • calculator.py:计算器的核心逻辑(加、减、乘、除)。
  • __main__.py:处理用户输入,解析命令行参数,调用 calculator.py 里的函数。
  • requirements.txt:列出项目依赖,让别人可以轻松安装你的 CLI 工具。
  • setup.py:让 CLI 应用支持 pip install,这样你就能随时随地运行它!

三、编写计算器逻辑(calculator.py)📖

首先,我们要写一个 Calculator 类,封装加减乘除的逻辑。

📌 代码如下

class Calculator:
    """一个简单的 CLI 计算器"""

    def add(self, a, b):
        """加法运算"""
        return a + b

    def sub(self, a, b):
        """减法运算"""
        return a - b

    def mul(self, a, b):
        """乘法运算"""
        return a * b

    def div(self, a, b):
        """除法运算(注意不能除以 0)"""
        if b == 0:
            raise ValueError("错误:除数不能为 0!")
        return a / b

📌 代码解释

  • 这个 Calculator 类定义了 add()sub()mul()div() 方法,分别处理加、减、乘、除运算。
  • 除法 div() 方法里加了一个错误检查,如果用户输入 0 作为除数,会抛出 ValueError,防止程序崩溃。

四、用 argparse 解析命令行参数(main.py)🖥

现在,我们来编写 CLI 的核心部分,使用 argparse 模块解析命令行参数。

📌 代码如下

import argparse
from cli_calculator.calculator import Calculator

def main():
    """CLI 主入口"""
    calculator = Calculator()

    # 创建 ArgumentParser 对象
    parser = argparse.ArgumentParser(prog="计算器",description="简单的 CLI 计算器", epilog="示例用法:cli_calculator add 1 2")

    # 创建子命令解析器
    subparsers = parser.add_subparsers(title="操作符", dest="operator",required=True)

    # 添加子命令(加、减、乘、除)
    for op in ["add", "sub", "mul", "div"]:
        sub_parser = subparsers.add_parser(op, help=f"{op} 两个数")
        sub_parser.add_argument("a", type=float, help="第一个数")
        sub_parser.add_argument("b", type=float, help="第二个数")
        sub_parser.add_argument("-p","--precision", type=int, default=2, help="保留的小数位数")
        
    # 解析参数
    args = parser.parse_args()
    print(args)
    # 执行对应运算
    if args.operator:
        try:
            operation = getattr(calculator, args.operator)
            result = round(operation(args.a, args.b), args.precision)
            print(f"计算结果 :{result}")
        except ValueError as e:
            print(f"错误:{e}")
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

📌 代码解释

  • argparse.ArgumentParser():创建命令行解析器,并定义 CLI 的描述信息。
  • parser.add_subparsers():创建子命令解析器,用于解析 addsubmuldiv 这些操作符。
  • getattr(calculator, args.operator):动态调用 Calculator 类中的方法(比如 add())。
  • round(result, args.precision):计算结果四舍五入,控制小数位数。

五、安装和运行 CLI 工具

📌 1. 创建 requirements.txt(列出项目依赖):

setuptools

📌 2. 创建 setup.py(让 CLI 工具可安装):

from setuptools import setup

setup(
    name="cli_calculator",
    version="1.0",
    packages=["cli_calculator"],
    entry_points={
        "console_scripts": ["cli_calculator = cli_calculator.__main__:main"],
    },
    description="一个简单的 Python CLI 计算器",
    author="花姐",
    python_requires=">=3.6",
)
  • name="cli_calculator":指定你的包的名字是 cli_calculator。这个名字在 Python 包管理平台(比如 PyPI)中是唯一的,用户通过这个名字来安装包。

  • version="1.0":指定包的版本号是 1.0,你可以根据包的更新更改版本号。

  • packages=["cli_calculator"]:这里列出了包含在包中的所有 Python 包。cli_calculator 是该包的主模块,它是一个文件夹,其中包含了实现代码。

  • entry_points:这个字段定义了一个或多个控制台脚本,这样用户可以通过命令行使用你的程序。具体来说:

    • "console_scripts": ["cli_calculator = cli_calculator.__main__:main"] 表示当用户在命令行中输入 cli_calculator 时,会调用 cli_calculator/__main__.py 文件中的 main() 函数。
    • 这种方式让你的 Python 包可以通过命令行直接运行,像一个普通的命令行工具。
  • description="一个简单的 Python CLI 计算器":这是包的简短描述,会在 PyPI 上显示,帮助用户理解这个包的功能。

  • author="花姐":指定包的作者名字。这里的作者是“花姐”,就是我啦!

  • python_requires=">=3.6":这个字段指定了包的 Python 版本要求。表示该包要求 Python 版本为 3.6 或更高版本。

📌 3. 安装 CLI 工具

pip install -e .

💡 解释

  • pip install -e . 这个命令的 -e 代表 editable mode(可编辑模式),意思是我们安装的是当前项目的源码版本,而不是一个打包好的固定版本。
  • 这样,我们修改代码后不需要重新安装,直接运行命令行工具就能看到最新效果,特别适合开发阶段!
  • pip install -e . -e的后面跟了一个千万被忘记。. 在 Unix 和 Windows 命令行中表示当前目录。 所以 pip install -e . 的意思是:在当前目录下查找 setup.py 文件,然后安装这个 Python 包。

📌 什么时候去掉 -e?🤔
pip install -e . 适用于开发阶段,但如果你的项目已经完成,或者你想要安装一个稳定的、独立的版本,那就该去掉 -e 了,直接使用:

pip install .

这样,pip 会把你的包复制到 site-packages 目录,不会再链接到源码目录,即使修改代码,安装的版本也不会自动更新。


📌 pip install -e .pip install . 的区别

命令用途
pip install -e .开发阶段:以“可编辑模式”安装,修改源码会立即生效。
pip install .发布/部署阶段:安装一个固定版本,修改源码不会影响已安装的包。

📌 4. 运行 CLI 计算器

cli_calculator add 6 9
cli_calculator div 6 9 -p 5

六、总结:你学到了什么?🎯

✅ 了解了 CLI 应用的基本概念。
✅ 掌握了 argparse,让 Python 脚本支持命令行参数。
✅ 用 Python 实现了一个 CLI 计算器,支持加减乘除运算。
✅ 学会了如何打包 CLI 应用,让它支持 pip install

💡 现在,你可以尝试扩展这个 CLI 计算器,比如增加 sqrt(开方)、power(幂运算)等新功能!你就是命令行世界的新晋黑客了!😎