一日一技:用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]

目录
相关文章
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4天前
|
人工智能 测试技术 数据处理
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
57 11
|
8天前
|
API Python
python泛微e9接口开发
通过POST请求向指定IP的API注册设备以获取`secrit`和`spk`。请求需包含`appid`、`loginid`、`pwd`等头信息。响应中包含状态码、消息及`secrit`(注意拼写)、`secret`和`spk`字段。示例代码使用`curl`命令发送请求,成功后返回相关信息。
30 5
|
10天前
|
缓存 Shell 开发工具
[oeasy]python064_命令行工作流的总结_vim_shell_python
本文总结了命令行工作流中的关键工具和操作,包括vim、shell和Python。主要内容如下: 1. **上次回顾**:完成了输入输出的代码编写,并再次练习了vim的使用。 2. **shell基础**:介绍了shell环境及其基本命令,如`pwd`、`cd`、`ll -l`等。 3. **Python游乐场**:通过`python3`命令进入Python交互环境,可以进行简单计算和函数调用,常用函数有`help`、`ord`、`chr`等。 4. **vim编辑器**:详细讲解了vim的三种模式(正常模式、插入模式、底行命令模式)及其切换方法,以及常用的底行命令如`:w`、`:q`、`
57 15
|
1月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
56 7
|
1月前
|
存储 NoSQL 数据库连接
在Python程序中实现LevelDB的海量key的分批次扫描
通过本文的步骤,您可以在Python程序中实现对LevelDB海量key的分批次扫描。这样不仅能够有效地管理大规模数据,还可以避免一次性加载过多数据到内存中,提高程序的性能和稳定性。希望这篇指南能为您的开发工作提供实用的帮助。
74 28
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
111 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
1月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
41 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
6月前
|
测试技术 Python
python 命令行参数 argparse详解
这篇文章是关于Python命令行参数解析库`argparse`的详细解释和使用教程。文中提供了完整的代码模板,包括如何定义命令行参数、如何添加位置参数、可选参数和布尔参数,以及如何解析和使用这些参数。文章还包含了示例代码和测试用例,以展示如何在实际程序中应用`argparse`库。
70 0
|
6月前
|
Python
python命令行解析模块argparse
python命令行解析模块argparse

热门文章

最新文章

推荐镜像

更多