Python如何编制一个命令行程序

1. 引言

命令行程序是一种在终端中运行的程序,通过给定的参数进行操作和输出结果。Python提供了丰富的库和工具来开发命令行程序。本文将以一个具体的问题为例,介绍如何使用Python编制一个命令行程序,并提供代码示例。

2. 需求分析

我们假设要编写一个命令行程序来管理学生信息,包括添加学生、查询学生和删除学生。每个学生有姓名、年龄和性别三个属性。

2.1 功能需求

  • 添加学生:输入学生姓名、年龄和性别,将学生信息保存到数据库中;
  • 查询学生:根据学生姓名查询学生信息,并输出结果;
  • 删除学生:根据学生姓名删除学生信息。

2.2 数据库设计

我们将使用SQLite数据库来保存学生信息。数据库中将有一个名为students的表,包含三个列:nameagegender

erDiagram
    students ||--o{ name : string
    students ||--o{ age : integer
    students ||--o{ gender : string

3. 开发方案

为了实现上述功能需求,我们可以按照以下步骤进行开发。

3.1 安装依赖库

首先,我们需要安装Python的依赖库sqlite3,用于操作SQLite数据库。

# 安装sqlite3库
pip install sqlite3

3.2 创建数据库和表

在程序中,我们需要创建一个SQLite数据库,并在其中创建一个名为students的表。我们可以将这部分代码放在一个单独的模块中,例如database.py

import sqlite3

# 连接数据库
conn = sqlite3.connect('students.db')

# 创建游标对象
cursor = conn.cursor()

# 创建students表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS students (
        name TEXT,
        age INTEGER,
        gender TEXT
    )
''')

# 提交更改
conn.commit()

# 关闭连接
conn.close()

3.3 实现命令行程序

下面我们来实现命令行程序,将上述功能需求转化为命令行参数的方式。

import argparse
import sqlite3

# 连接数据库
conn = sqlite3.connect('students.db')

# 创建游标对象
cursor = conn.cursor()

# 添加学生
def add_student(name, age, gender):
    cursor.execute('''
        INSERT INTO students VALUES (?, ?, ?)
    ''', (name, age, gender))
    conn.commit()
    print('添加学生成功')

# 查询学生
def query_student(name):
    cursor.execute('''
        SELECT * FROM students WHERE name=?
    ''', (name,))
    student = cursor.fetchone()
    if student:
        print('姓名:', student[0])
        print('年龄:', student[1])
        print('性别:', student[2])
    else:
        print('未找到该学生')

# 删除学生
def delete_student(name):
    cursor.execute('''
        DELETE FROM students WHERE name=?
    ''', (name,))
    conn.commit()
    print('删除学生成功')

if __name__ == '__main__':
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description='学生信息管理系统')

    # 添加子命令:添加学生
    add_parser = parser.add_subparsers(dest='command')
    add_student_parser = add_parser.add_parser('add', help='添加学生')
    add_student_parser.add_argument('name', type=str, help='学生姓名')
    add_student_parser.add_argument('age', type=int, help='学生年龄')
    add_student_parser.add_argument('gender', type=str, choices=['男', '女'], help='学生性别')

    # 添加子命令:查询学生
    query_parser = parser.add_subparsers(dest='command')
    query_student_parser = query_parser.add_parser('query', help='查询学生')
    query_student_parser.add_argument('name', type=str, help='学生姓名')

    # 添加子命令:删除学生
    delete_parser = parser.add_subparsers(dest='command')
    delete_student_parser = delete_parser.add_parser('delete', help='删除学生')
    delete_student_parser.add_argument('name', type=str, help='学生姓名')

    # 解析命令行参数
    args = parser.parse_args()

    # 执行对应的功能