命令行解析器浅解

1、什么叫解析器?

解析器(parser)是一种程序或组件,用于分析输入的数据,并将其转换为更易于处理的格式。解析器在计算机科学中有广泛的应用,特别是在编译器、解释器、自然语言处理和数据格式转换等领域。

1.1解析器的主要功能:

1. 语法分析: 检查输入数据是否符合特定的语法规则。
2. 语义分析: 在语法正确的基础上,进一步检查数据的逻辑或语义正确性。
3. 数据转换: 将输入数据转换为另一种表示形式,以便后续处理。

2、什么叫命令行解析器?

命令行解析器(command-line parser)是一种专门用于处理命令行输入的解析器。它的主要功能是解析用户在命令行界面(CLI)中输入的命令、选项和参数,并将其转换为程序可以处理的格式。(也就是说,在终端内使用python example.py运行的时候,会有很多其他的参数,命令行解析器就是用来解析这些参数,以便完成相应的功能)。

2.1 命令行解析器的主要功能:

1. 解析命令和参数: 将命令行输入解析成命令、选项(flags)和参数。
2. 验证输入: 检查命令和参数是否符合预定义的规则和格式。
3. 生成帮助信息: 当用户请求帮助或输入无效时,生成和显示帮助信息。
4. 错误处理: 处理输入错误,并给出有意义的错误消息。

2.2 命令行解析器的典型用法:

2.3 示例:使用 Python 的 argparse 模块

# 添加参数add_argument,add_argument("--变量",type = ?(这里是变量的类型),default= 这是默认取值,这个可以有也可以没有,但没有的时候,命令行里就必须有,否则报错。required:指定该参数是否是必需的。默认为 False,即可选参数。如果将其设置为 True,则在命令行中必须提供该参数,否则将引发错误。help="……",help的作用是当你在命令行中输入-h时会提醒你)

import argparse# 创建argparse.ArgumentParser解析器
parse = argparse.ArgumentParser(description="This is a description.") 
# parse = argparse.ArgumentParser()括号里可以什么也不写
# 这里写了description是提示# 添加参数add_argument
parse.add_argument("--length",type=int,default=10,required=True,help="请输入length的值") # 有默认值
parse.add_argument("--wigth",type=int,required=True,help="请输入width的值") # 没有默认值# 解析参数parse_args
args = parse.parse_args()if __name__ == '__main__':result = args.length * args.wigthprint(f"result = {result}",f"result = {str(result)}")
'''  
运行结果(无任何参数):   python test1.py
usage: test1.py [-h] --length LENGTH --width WIDTH
test1.py: error: the following arguments are required: --length, --width
'''
'''
运行结果(带-h):
python test1.py -h
usage: test1.py [-h] --length LENGTH --width WIDTHThis is a description.options:-h, --help       show this help message and exit--length LENGTH  请输入length的值--width WIDTH    请输入width的值
''''''
运行结果(带参数):
python test1.py --length 20 --wigth 10
result = 200 result = 200
'''
import argparse# 创建解析器
parser = argparse.ArgumentParser(description='示例程序')# 添加选项和参数
parser.add_argument('--input', type=str, required=True, help='输入文件路径')
parser.add_argument('--output', type=str, required=True, help='输出文件路径')
parser.add_argument('--verbose', action='store_true', help='是否启用详细模式')# 解析命令行参数
args = parser.parse_args()# 使用解析后的参数
print(f"输入文件: {args.input}")
print(f"输出文件: {args.output}")
if args.verbose:print("详细模式已启用")

2.4 命令行输入示例:

假设有一个程序 `example.py`,它可以接受两个选项 `--input` 和 `--output`,以及一个参数 `--verbose`。


python example.py --input file.txt --output result.txt --verbose

使用命令行解析器时,程序会将用户的输入解析成以下结构:
- 命令: `example.py`
- 选项:
  - `--input`: `file.txt`
  - `--output`: `result.txt`
- 参数:
  - `--verbose`: 存在与否即为布尔值

3、写成.sh文件

3.1 什么是.sh文件

SH文件通常指的是Shell脚本文件,具有.sh的后缀名,包含一系列要由操作系统的命令解释器执行的命令。是一种在UNIX/Linux操作系统中常见的脚本文件类型。它们以纯文本格式存储,使用Bash(Bourne Again SHell)或其他Unix shell(如Ksh或Csh)语言编写。SH文件主要用于执行特定的脚本命令,实现特定的功能。在Linux系统中,.sh文件通过Shell的命令行界面执行,可以用于程序开发、自动化脚本编写等任务。

  • 用途:.sh文件主要用于在Unix/Linux环境中编写简单的程序和自动化脚本。
  • 执行:可以通过在Shell的命令行界面中输入sh xxx.sh来执行.sh文件。
  • 编辑:.sh文件可以使用任何文本编辑器(如记事本)打开和编辑。
  • 运行:在Linux系统中,.sh文件可以通过直接调用其名称(如./test.sh)来运行,前提是文件具有执行权限。

总的来说,.sh文件是Linux和Unix系统中非常重要的文件类型,它们允许用户通过脚本执行一系列命令,从而简化复杂的操作过程或实现自动化任务。

3.2 .sh文件可以写什么?

因此上面的命令可以写进.sh文件中,
test.sh文件内容是:

python test1.py --length 20 --wigth 10

.sh文件中还可以写:

#! /bin/bash
echo "操作已完成,按 Enter 键继续..."     #echo "……" 向终端输出……
read -p ""  #read -p "" 命令来等待用户的输入。
# 当用户按下 Enter 键后,脚本会退出,并保持命令窗口打开。

3.3 #! /bin/bash的作用:

在 Shell 脚本中,#!/bin/bash 是指定脚本使用 Bash 解释器的 shebang 语句。它出现在脚本的第一行,并告诉操作系统使用 Bash 解释器来执行该脚本。

当然有很多时候不规范的写法可以忽略掉这一句,执行起来好像也是ok,结果没什么不一样 。

这只是因为在我们常用 的linux系统上默认都是执行/bin/bash来执行我们的shell脚本,但是如果有些用户使用的是csh,那么缺少第一行的“#!/bin/bash的shell脚本执行结果就可能存在语法不兼容的问题,导致结果异常或者根本不能执行。

这也是在shell中唯一以#号开头却不代表是注释的意思,其他任何地方以#号开头的语句都会被认为是注释语句而忽略执行,所以这句话只能写在 shell的开头才有效。

4、相关资料推荐:

是同一个博主的连续的连续的两篇↓:

写一个python文件,在shell脚本中运行_pycharm运行shell脚本-CSDN博客

【Python基础函数笔记】parser.add_argument详解_parser add argument-CSDN博客

相关sh文件介绍。

SH文件介绍-CSDN博客

小结

- 解析器是分析和处理输入数据的程序或组件。
- 命令行解析器专门处理命令行界面中的输入,将命令、选项和参数解析为程序可以理解的结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存函数<C语言>

前言 前面两篇文章介绍了字符串函数,不过它们都只能用来处理字符串,C语言中也内置了一些内存函数来对不同类型的数据进行处理,本文将介绍:memcpy()使用以及模拟实现,memmove()使用以及模拟实现,memset()使用…

vue3学习(四)

前言 接上篇学习笔记&#xff0c;分享3个内置组件&#xff1a;动态组件、缓存组件、分发组件基本用法。大家一起通过code的示例&#xff0c;从现象理解,注意再次理解生命周期。 一、code示例 组件A&#xff1a;CompA <script setup> import {onMounted, onUnmounted} f…

[双指针] --- 快乐数 盛最多水的容器

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们分享一下双指针算法中的快慢指针以及对撞双指针&#xff0c;下面我们开始今天的学习吧~ &#x1f3e0; 快乐数 &#x1f4d2; 题…

​用 ONLYOFFICE 宏帮你自动执行任务:介绍与教程

使用 ONLYOFFICE 宏&#xff0c;可以来自动实现一些操作节省更多时间和精力。在本文中&#xff0c;我们集合了一些关于宏的教程&#xff0c;带您了解宏的工作原理&#xff0c;以及一些实例展示。 什么是 ONLYOFFICE 宏 如果您是一名资深 Microsoft Excel 用户&#xff0c;那么…

python -【三】循环语句

循环语句 一、while 循环 while 语法 while 条件: 条件满足时&#xff0c;做事情 a 0 while a < 100:print(i like python ...)a 1求 1-100 的总和 i 1 sum 0 while i < 100:sum ii 1 print(f1-100 的和是 {sum})""" 1-100 的和是 5050 &qu…

BH-0.66 6000/5/150电流互感器 塑壳 JOSEF约瑟

BH-0.66 15/5塑壳式电流互感器 BH-0.66 20/5塑壳式电流互感器 BH-0.66 30/5塑壳式电流互感器 BH-0.66 40/5塑壳式电流互感器 BH-0.66 50/5塑壳式电流互感器 BH-0.66 75/5塑壳式电流互感器 BH-0.66 100/5塑壳式电流互感器 BH-0.66 150/5塑壳式电流互感器 BH-0.66 200/5塑壳式…

python——__future__模块

__future__模块是Python的一个特殊内建模块&#xff0c;它提供了一种方式来让程序员在当前版本的Python中使用未来版本的语言特性&#xff0c;从而帮助代码实现向前兼容。这意味着&#xff0c;即使你正在使用的是旧版本的Python&#xff0c;也可以通过导入__future__模块中的某…

BevDet(1): 算法原理介绍介绍

BevDet是一个LSS-Based的实时高性能的多相机3D检测模型,它用4阶段的范式去做3D目标检测,设计上同时支持Segmentation。何谓4阶段范式: 1.图像域的特征提取(Image -view Encoder)2.视角转换 (View Transformer)3.Bev空间特征提取(BEV Encoder)4.任务头Head它涉及 Image View …

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量,一切的好事都应该有权利发生

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量 《我自我的田渠归来》作者张晓风&#xff0c;被称为华语散文温柔的一支笔&#xff0c;她的短文很有味道&#xff0c;角度奇特&#xff0c;温柔慈悲而敏锐。 很幸运遇到了这本书&#xff0c;以她的感受重新认识一些事…

线程池在业务中的实践

文章目录 1. 业务背景 1. 业务背景 场景一&#xff1a; 快速响应用户请求 场景描述&#xff1a;比如说⽤户要查看⼀个商品的信息&#xff0c;那么我们需要将商品维度的⼀系列信息如商品的价格、优惠、库存、图⽚等等聚合起来&#xff0c;展示给⽤户。 分析&#xff1a;从用户角…

C++标准模板(STL)- C 内存管理库 - 分配并清零内存 (std::calloc)

C 内存管理库 分配并清零内存 std::calloc void* calloc( std::size_t num, std::size_t size ); 分配 num 个大小为 size 的对象的数组&#xff0c;并初始化所有位为零。 若分配成功&#xff0c;则返回指向为任何对象类型适当对齐的&#xff0c;被分配内存块最低&#xf…

大数据Scala教程从入门到精通第十篇:Scala在IDEA中编写Hello World代码的简单说明

一&#xff1a;代码展示 object Main {def main(args: Array[String]): Unit {//SCALA中可以不写;//绿色的小三角达标的是这个类中有一个MAIN方法代表是可以执行的。//ctrl shift f10可以直接运行println("Hello world!")//Java中的类库我们可以直接使用System.o…

TH方程学习(1)

一、背景介绍 根据CW方程的学习&#xff0c;CW方程的限制条件为圆轨道&#xff0c;不考虑摄动&#xff0c;二者距离相对较小。TH方程则可以将物体间的相对运动推广到椭圆轨道的二体运动模型&#xff0c;本部分将结合STK的仿真功能&#xff0c;联合考察TH方程的有用性&#xff…

TransFormer学习之基础知识:STN、SENet、CBAM、Self-Attention

1.空间注意力机制STN 参考链接&#xff1a;STN(Spatial Transformer Networks) 参考链接&#xff1a;通俗易懂的Spatial Transformer Networks(STN) 核心动机&#xff1a; 在空间中捕获重要区域特征(如图像中的数字)&#xff0c;将核心区域进行放大居中&#xff0c;使得结果更…

java面试中高频问题----1

一、乐观锁和悲观锁定义、场景怎么判断用什么&#xff1f; 1.乐观锁&#xff1a; 定义&#xff1a;乐观锁假设大多数情况下&#xff0c;资源不会发生冲突。因此&#xff0c;允许多个线程同时访问资源。 场景&#xff1a;读操作多&#xff0c;写操作少&#xff0c;数据冲突概率…

人工智能的数学基础(高数)

&#x1f31e;欢迎来到人工智能的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年5月29日&…

day21二叉树part07|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

**530.二叉搜索树的最小绝对差 ** 遇到在二叉搜索树上求什么最值&#xff0c;求差值之类的&#xff0c;都要思考一下二叉搜索树可是有序的&#xff0c;要利用好这一特点。 class Solution { public:void trival(TreeNode* node, vector<int>& nums) {if (node nul…

Linux学习笔记(epoll,IO多路复用)

Linux learning note 1、epoll的使用场景2、epoll的使用方法和内部原理2.1、创建epoll2.2、使用epoll监听和处理事件 3、示例 1、epoll的使用场景 epoll的英文全称是extend poll&#xff0c;顾名思义是poll的升级版。常见的IO复用技术有select&#xff0c;poll&#xff0c;epo…

Photoshop粘贴 lorem-ipsum 占位符文本

Photoshop在使用文字工具的时候&#xff0c;点击画布会自动出现一段英文“Lorem Ipsum”&#xff0c;这是占位文本&#xff0c;除了响应速度慢外&#xff0c;目前我也没发现它有什么太大意义。 那么要如何操作才能取消占位文本的填写呢&#xff1f;在菜单栏点 编辑-首选项-文字…

window 安装 nginx

下载、安装 官网下载地址&#xff1a;https://nginx.org/en/download.html 选择稳定版 在这里插入图片描述