下面这段代码常出现在 RAG 项目的入口:不带开关时运行查询流程,带上
--data-processing 时运行资料处理流程。
import argparse
parser = argparse.ArgumentParser(description="EduRAG 程序入口")
parser.add_argument("--data-processing", action="store_true",
help="运行资料处理模式")
parser.add_argument("--data-dir", default="./data",
help="资料目录,默认为 ./data")
args = parser.parse_args()
要读懂它,沿着“声明规则—解析输入—读取属性—调用业务函数”这条路径看即可。
创建解析器:声明接口说明
ArgumentParser 是解析器对象。description
用于帮助信息,不会改变业务行为。
用户执行 python main.py --help
时,解析器会生成参数说明并退出。帮助输出是命令行接口的一部分,不需要再手工编写另一套说明。Python argparse
文档
布尔开关:出现即为 True
action="store_true" 表示:参数出现时保存
True,未出现时默认保存 False。
python main.py
→ args.data_processing 为 False
python main.py --data-processing
→ args.data_processing 为 True
不需要写 --data-processing True。后面的
True 会被视为另一个参数,通常导致解析错误。
参数名与属性名不完全相同
命令行通常用短横线,Python
属性使用下划线。默认情况下,--data-dir 对应
args.data_dir,--data-processing 对应
args.data_processing。
未提供目录时,值为 "./data";提供
--data-dir ./course_data 时,值为
"./course_data"。相对路径基于启动程序时的工作目录,不一定是脚本所在目录。
最后一步才是业务调用
main(query_mode=not args.data_processing, directory_path=args.data_dir)
| 命令行 | data_processing | query_mode | 运行意图 |
|---|---|---|---|
| 不带模式开关 | False | True | 查询 |
| 带 –data-processing | True | False | 资料处理 |
argparse 只完成参数解析,不会自行调用
RAG、创建目录或验证业务规则。main 必须由项目定义。
一个独立运行的小例子
以下程序只打印分支,不执行真实资料入库:
import argparse
def run(query_mode, directory_path):
mode = "查询模式" if query_mode else "资料处理模式"
print(f"模式:{mode};目录:{directory_path}")
def main():
parser = argparse.ArgumentParser(description="演示模式切换")
parser.add_argument("--data-processing", action="store_true")
parser.add_argument("--data-dir", default="./data")
args = parser.parse_args()
run(query_mode=not args.data_processing, directory_path=args.data_dir)
if __name__ == "__main__":
main()
把它保存为
main.py,分别运行有开关和无开关的命令,就能看到布尔值如何改变业务入口。
自测:为什么 --data-processing 为
True,query_mode 却为 False?因为入口显式使用了
not,两者表达互斥的运行模式。