一日一技:用Python如何正确开发命令行交互程序

简介: 一日一技:用Python如何正确开发命令行交互程序

摄影:产品经理与产品经理周游世界

我要写一个命令行交互程序,当用户输入不同命令时执行不同操作。

相信看本文的同学,你可能会这样写:

def query_by_id(user_id):
    print(f'查询 id 为:{user_id} 对应的用户')
def query_by_name(user_name):
    print(f'查询用户名为:{user_name} 的用户')
def main():
    whileTrue:
        option = input('请输入选项前面的数字:1. 根据 id 查询;2.根据用户名查询>')
        if option == '1':
            user_id = input('请输入用户 id>')
            query_by_id(user_id)
        elif option == '2':
            user_name = input('请输入用户名>')
            query_by_name(user_name)
        elif option == 'exit':
            print('退出!')
            break
        else:
            print('输入无效,请重新输入')
if __name__ == '__main__':
    main()

运行效果如下图左边所示:

这种方式确实可以达到目的。但 Python 实际上有专门用来实现这个目的的模块,叫做cmd。这是 Python 自带的。

我们来改造一下上面的例子:

import cmd
class Query(cmd.Cmd):
    intro = '用户信息查询系统,输入 help 或者?查看帮助。\n'
    prompt = 'query>'
    def do_query_by_id(self, arg):
        '根据用户 id 查询用户'
        self.query_by_id(arg)
    def do_query_by_name(self, arg):
        '根据用户名查询'
        self.query_by_name(arg)
    def do_exit(self, _):
        '退出'
        exit(0)
    def query_by_id(self, user_id):
        print(f'查询 id 为:{user_id} 对应的用户')
    def query_by_name(self, user_name):
        print(f'查询用户名为:{user_name} 的用户')
if __name__ == '__main__':
    Query().cmdloop()

运行效果如下图所示:


我们需要实现一个类,继承cmd.Cmd。在我们自己写的这个类中,类属性intro表示我们的命令行程序运行时显示的内容。prompt是每行的提示符,类似于 Python 的>>>或者 CMD 的C:\>

所有以do_开头的方法,都对应了我们可以执行的命令。例如do_query_by_id表示命令query_by_id。当我们输入命令query_by_id时,就会执行这个方法里面的内容。命令后面的参数会通过arg参数传入进来。

命令执行方法里面的第一行字符串(docstring)会自动变成这个命令的帮助文档。当你在命令中输入help 命令时,就会显示帮助信息。

当你直接输入?或者help时,就会显示当前可以使用的所有命令。

类定义好以后,我们可以通过类名().cmdloop()来运行。

这样写出来的命令行交互程序,易用性好很多。

cmd模块还可以定义每个命令执行前的 hook 函数和执行后的 hook 函数。更多用法,请看官方文档[1]

目录
相关文章
|
8天前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
48 15
|
8天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
8天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
15天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
41 3
如何使用Python开发API接口?
|
8天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
24 1
|
10天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
14天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
15天前
|
存储 机器学习/深度学习 搜索推荐
Python编程入门:从零开始构建你的第一个程序
【10月更文挑战第32天】本文旨在通过浅显易懂的方式引导编程新手进入Python的世界。我们将一起探索Python的基础语法,并通过实例学习如何构建一个简单的程序。文章将不直接展示代码,而是鼓励读者在阅读过程中自行尝试编写,以加深理解和记忆。无论你是编程初学者还是希望巩固基础知识的开发者,这篇文章都将是你的良师益友。让我们开始吧!
|
IDE 开发工具 Android开发
Python开发神器PyCharm,体验下吧
Python开发神器PyCharm,体验下吧
181 0
Python开发神器PyCharm,体验下吧
|
存储 监控 IDE
猪行天下之Python基础——1.3 Python开发IDE之PyCharm(下)
内容简述: 1、为什么要使用IDE? 2、PyCharm的下载安装 3、PyCharm的基本使用 4、PyCharm程序调试 5、共用全局的Python解释器
267 0
下一篇
无影云桌面