Python如何编制一个命令行程序
1. 引言
命令行程序是一种在终端中运行的程序,通过给定的参数进行操作和输出结果。Python提供了丰富的库和工具来开发命令行程序。本文将以一个具体的问题为例,介绍如何使用Python编制一个命令行程序,并提供代码示例。
2. 需求分析
我们假设要编写一个命令行程序来管理学生信息,包括添加学生、查询学生和删除学生。每个学生有姓名、年龄和性别三个属性。
2.1 功能需求
- 添加学生:输入学生姓名、年龄和性别,将学生信息保存到数据库中;
- 查询学生:根据学生姓名查询学生信息,并输出结果;
- 删除学生:根据学生姓名删除学生信息。
2.2 数据库设计
我们将使用SQLite数据库来保存学生信息。数据库中将有一个名为students
的表,包含三个列:name
、age
和gender
。
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()
# 执行对应的功能