命令行解析器浅解

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.wigth
    print(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 WIDTH

This 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博客

小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络学习笔记——运输层(b站)

目录 一、 运输层概述 二、运输层端口号、复用与分用的概念 三、UDP和TCP的对比 四、TCP的流量控制 五、TCP的拥塞控制 六、TCP超时重传时间的选择 七、TCP可靠传输的实现 八、TCP报文段的首部格式 一、 运输层概述 物理层、数据链路层、网络层实现了主机到主机的通信…

存储器和CPU的连接与TCP的流量控制

存储器与CPU的连接 存储容量的拓展 (1)位拓展:增加存储字长 (2)字拓展 增加存储器字的数量 例题:设CPU有16根地址线,8根数据线,并用MREQ作为访问存储控制信号(低电平有效),WR作为…

错误记录:从把项目从Tomcat8.5.37转到Tomcat10.1.7

错误信息:在本地Servlet项目里没有报错,但是浏览器跳转该servlet时报错 型 异常报告 消息 实例化Servlet类[com.wangdao.lx.MyServlet1]异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 jakarta.servlet.ServletExceptio…

debian11安装留档@VirtualBox

因为debian12无法安装tpot,所以又把11重新安装一遍,以前的安装文档:安装Debian 11 留档-CSDN博客 下载光盘 华为云地址:https://repo.huaweicloud.com/debian-cd/11.0.0/amd64/iso-cd/ 使用了debian11 教育版,比较有…

Spring Cache自定义缓存key和过期时间

一、自定义全局缓存key和双冒号替换 使用 Redis的客户端 Spring Cache时,会发现生成 key中会多出一个冒号,而且有一个空节点的存在。 查看源码可知,这是因为 Spring Cache默认生成key的策略就是通过两个冒号来拼接。 同时 Spring Cache缓存…

【开源三方库】Aki:一行代码极简体验JSC++跨语言交互

一、简介 OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是JavaScript(简称JS&#xf…

大模型时代的具身智能系列专题(五)

stanford宋舒然团队 宋舒然是斯坦福大学的助理教授。在此之前,他曾是哥伦比亚大学的助理教授,是Columbia Artificial Intelligence and Robotics Lab的负责人。他的研究聚焦于计算机视觉和机器人技术。本科毕业于香港科技大学。 主题相关作品 diffusio…

MySQL之创建高性能的索引(六)

创建高性能的索引 选择合适的索引列顺序 当使用前缀索引的时候,在某些条件值的基数比正常值高的时候,问题就来了。例如,在某些应用程序中,对于没有登录的用户,都将其用户名记录为"guest",在记录…

OpenMV学习笔记2——颜色识别

目录 一、打开单颜色识别实例代码 二、代码基础部分 三、阈值选择 四、给识别到的颜色画框 五、多颜色识别 一、打开单颜色识别实例代码 如图,双击打开对应文件即可进入实例代码。 二、代码基础部分 # Single Color RGB565 Blob Tracking Example # # This e…

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

MindSpore在Windows11系统下的环境配置。 MindSpore环境配置大概分为三步:(1)安装Python环境,(2)安装MindSpore,(3)验证是否成功 如果是GPU环境还需安装CUDA等环境&…

浅谈 parallelStream和Stream 源码及其应用场景

上篇讲述了list.forEach()和list.stream().forEach() 异同点 谈到了并行流的概念&#xff0c;本篇则从源码出发&#xff0c;了解一下其原理。 一、流的初始操作流程 jdk8中 将Collection中加入了转换流的概念。 default Stream<E> stream() {return StreamSupport.str…

Verilog HDL基础知识(一)

引言&#xff1a;本文我们介绍Verilog HDL的基础知识&#xff0c;重点对Verilog HDL的基本语法及其应用要点进行介绍。 1. Verilog HDL概述 什么是Verilog&#xff1f;Verilog是IEEE标准的硬件描述语言&#xff0c;一种基于文本的语言&#xff0c;用于描述最终将在硬件中实现…

2024 angstromCTF re 部分wp

Guess the Flag 附件拖入ida 比较简单&#xff0c;就一个异或 switcher 附件拖入ida 明文flag Polyomino 附件拖入ida 需要输入九个数&#xff0c;然后进入处理和判断&#xff0c;如果满足条件则进入输出flag部分&#xff0c;flag和输入有关&#xff0c;所以要理解需要满足什么…

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

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

ChatGPT的基本原理是什么?又该如何提高其准确性?

在深入探索如何提升ChatGPT的准确性之前&#xff0c;让我们先来了解一下它的工作原理吧。ChatGPT是一种基于深度学习的自然语言生成模型&#xff0c;它通过预训练和微调两个关键步骤来学习和理解自然语言。 在预训练阶段&#xff0c;ChatGPT会接触到大规模的文本数据集&#x…

转发和重定向

目录 是什么 转发&#xff08;Forwarding&#xff09; 概念 特点 实现方式 重定向&#xff08;Redirecting&#xff09; 概念 特点 实现方式 转发和重定向区别整理 转发和重定向的适用场景 转发&#xff08;Forwarding&#xff09; 重定向&#xff08;Redirect&am…

反转!Greenplum 还在,快去 Fork 源码

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 今早被一条消息刷爆群聊&#xff0c;看到知名开源数仓 Greenplum 的源码仓“删库跑路”了。 要知道 GP 新东家 Broadcom 前几日才刚刚免费开放了 VMware Workstation PRO 17 和 VMware Fusion P…

【本地运行chatgpt-web】启动前端项目和service服务端项目,也是使用nodejs进行开发的。两个都运行成功才可以使用!

1&#xff0c;启动web界面 https://github.com/Chanzhaoyu/chatgpt-web#node https://nodejs.org/en/download/package-manager # 使用nvm 安装最新的 20 版本。 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source /root/.bashrc n…

stm32学习-CubeIDE使用技巧

1.hex文件生成 右键工程 2.仿真调试 3.常用快捷键 作用快捷键代码提示alt/代码注释/反注释ctrl/ 4.项目复制 复制项目&#xff0c;将ioc文件名改为项目名即可图形化编辑

开源一个工厂常用的LIMS系统

Senaite是一款强大且可靠的基于Web的LIMS/LIS系统&#xff0c;采用Python编写&#xff0c;构建在Plone CMS基础架构之上。该系统处于积极开发阶段&#xff0c;在灵活的定制空间中为开发人员提供了丰富的功能。其中&#xff0c;Senaite在处理REST的JSON API上做得出色&#xff0…