命令行解析器浅解

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;那么…

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塑壳式…

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;以她的感受重新认识一些事…

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;使得结果更…

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

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

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;在菜单栏点 编辑-首选项-文字…

MindSpore实践图神经网络之环境篇

MindSpore在Windows11系统下的环境配置。 MindSpore环境配置大概分为三步&#xff1a;&#xff08;1&#xff09;安装Python环境&#xff0c;&#xff08;2&#xff09;安装MindSpore&#xff0c;&#xff08;3&#xff09;验证是否成功 如果是GPU环境还需安装CUDA等环境&…

新火种AI|寻求合作伙伴,展开豪赌,推出神秘AI项目...苹果能否突破AI困境?

作者&#xff1a;小岩 编辑&#xff1a;彩云 2024年&#xff0c;伴随着AI技术的多次爆火&#xff0c;不仅各大科技巨头纷纷进入AI赛道展开角力&#xff0c;诸多智能手机厂商也纷纷加紧布局相关技术&#xff0c;推出众多AI手机。作为手机领域的龙头老大&#xff0c;苹果自然是…

学生成绩统计分析系统介绍

学生成绩统计分析系统是一种用于收集、管理和分析学生学业成绩的软件系统。该系统旨在帮助学校和教育机构更好地了解学生的学习情况&#xff0c;进行成绩评估和分析&#xff0c;以支持教学决策和学生发展。学生成绩分析系统 系统专门针对学校/班级成绩管理使用&#xff0c;支持…

F. Longest Strike[双指针详解]

Longest Strike 题面翻译 给你一个长度为 n n n 的序列 a a a 和一个整数 k k k&#xff0c;你要求一个区间 [ l , r ] [l,r] [l,r] 满足&#xff1a; 对于任何整数 x ∈ [ l , r ] x∈[l,r] x∈[l,r]&#xff0c; x x x 在 a a a 中的出现次数不少于 k k k 次。最大…

redis数据类型之Hash,Bitmaps

华子目录 Hash结构图相关命令hexists key fieldhmset key field1 value1 [field2 value2...]hscan key cursor [MATCH pattern] [COUNT count] Bitmaps位图相关命令setbit1. **命令描述**2. **语法**3. **参数限制**4. **内存分配与性能**5. **应用实例**6. **其他相关命令**7.…

19 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 冰后回弹(GIA)改正

19 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 冰后回弹(GIA)改正 0 引言1 gia数据处理过程0 引言 由水量平衡方程可以将地下水储量的计算过程分解为3个部分,第一部分计算陆地水储量变化、第二部分计算地表水储量变化、第三部分计算冰后回弹改正、第四部分计算地下…

ABAP MD04增强排除MRP元素

场景 MD04跑出来很多MRP元素&#xff0c;用户想手工控制某些MRP元素不参与运算 分析 增强点还蛮好找的&#xff0c;控制MRP元素是否参与运算用下面的se19三代增强点就可以&#xff0c;打个断点看下MD04进的哪个增强点就行 旧版本的用这个&#xff1a;MD_CHANGE_MRP_DATA 新…

NVIDIA Jetson 上编译opencv 4.9.0

直接上命令 cmake .. \ -DCMAKE_C_COMPILER/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER/usr/bin/g-7 \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DOPENCV_ENABLE_NONFREE1 \ -DBUILD_opencv_python21 \ -DBUILD_opencv_python31 \ -DCUDA_TOOLKIT_ROOT_DIR…