命令行解析器浅解

news2024/9/21 4:27:00

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

小结

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

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

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

相关文章

2019美亚

1.何源是一名 25 岁的客服人员,在一间电讯公司工作。某日,何源在用 iPhone 手机在政府建筑物 中偷拍车牌期间被警员截停,盘问期间警员检查手机相册发现多张车牌图片,何源情绪紧张,趁 警员不被,抢过手机丢入…

vmware中Ubuntu虚拟机和本地电脑Win10互相ping通

初始状态 使用vmware17版本安装的Ubuntu的20版本,安装之后什么配置都要不懂,然后进行下述配置。 初始的时候是NAT,没动的. 设置 点击右键编辑“属性” 常规选择“启用”: 高级选择全部: 打开网络配置,右键属…

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

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

方法的重写--5.29

当子类对父类的方法不满意时,可以进行重写,但是方法名字要与父类一样。 举例,我用people来举例,我是打工人,然后再创一个student类,重写方法我不是打工人,我是读书人。代码如下,发现…

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

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

【busybox记录】【shell指令】mkfifo

目录 内容来源: 【GUN】【mkfifo】指令介绍 【busybox】【mkfifo】指令介绍 【linux】【mkfifo】指令介绍 使用示例: 创建管道文件 - 创建的时候同时指定文件权限 常用组合指令: 指令不常用/组合用法还需继续挖掘: 内容来…

ABAP MD04增强排除MRP元素

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

鸿蒙开发【实现页面路由跳转】接上一个微博页面

给顶部最左边的日历图标设置点击事件实现页面跳转 需要展示页面内容示例图: 6.1.1.设置页面头部内容 新建一个页面命名为MydailyPage ,给整个页面设置背景属性 代码如下: Entry Componentstruct MydailyPage { build() { Column() { …

linux Inodes满导致数据库宕机

项目经理反馈集群环境中有个节点无法使用了需要支援下,同时发过来截图说明磁盘还是有空的。 登录系统后直接发现问题 orcl2:/home/oracledb2> sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Wed May 29 13:59:21 2024 Copyright (c) 1982,…

云原生架构内涵_3.主要架构模式

云原生架构有非常多的架构模式,这里列举一些对应用收益更大的主要架构模式,如服务化架构模式、Mesh化架构模式、Serverless模式、存储计算分离模式、分布式事务模式、可观测架构、事件驱动架构等。 1.服务化架构模式 服务化架构是云时代构建云原生应用的…

串口通信问题排查总结

串口通信问题排查 排查原则: 软件从发送处理到接收处理,核查驱动、控制及发送接收数据是否正常。硬件从发送到接收,针对信号经过的各段,分段核对信号是否正常。示波器、逻辑分析仪。用万用表、示波器、逻辑分析仪等工具&#xf…

小程序如何更换营业执照

​因为商家经营业务的变更,尤其是之前的营业执照注销等原因,导致要求更换小程序主体。下面就具体介绍如何进行变更。 1. 登录mp.weixin.qq.com,找到设置->基本设置,在主体信息字段,点击小程序主体变更。主体变更分…

MVC架构中的servlet层重定向404小坑

servlet层中的UserLoginServlet.java package com.mhys.servlet; /*** ClassName: ${NAME}* Description:** Author 数开_11* Create 2024-05-29 20:32* Version 1.0*/import com.mhys.pojo.User; import com.mhys.service.UserService; import com.mhys.service.impl.UserSer…

tomcat学习--部署java项目

主流开发项目,springboot框架下,jar部署java传统的tomcat发布war包 一 什么是tomcat? 是一个用于运行java程序的软件,发布的时候:开发将源码使用maven打包,生产war包 二 安装tomcat tomcat是java写的&a…

蓝桥杯-AB路线(详细原创)

问题描述: 有一个由 N M 个方格组成的迷宫,每个方格写有一个字母 A 或者 B。小蓝站在迷宫左上角的方格,目标是走到右下角的方格。他每一步可以移动到上下左右相邻的方格去。 由于特殊的原因,小蓝的路线必须先走 K 个 A 格子、再…

计算机系统基础实验三(解了但尽量理解)

一.准备阶段 1、下载好32位的实验代码后,将文件解压缩并且通过共享文件夹操作将文件添加到虚拟机中,双击查看bomb.c代码,将c代码完整看了一遍,发现看这里的c代码是无从下手的,代码中只含有主函数,触发炸弹…

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

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

【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来

Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了,所以今天就没有写一点验一点,而是在写完获取博客列表功功能,验证完它的后端后,了解完令牌的基本使用以及Jwt的基本使用方式——…

【高校科研前沿】南科大姜丽光课题组在地球物理学领域TOP期刊Geophys. Res. Lett.发表极端气候频发下水库蓄水状态的相关研究成果

文章简介 论文名称:Reservoir Filling Up Problems in a Changing Climate:Insights From CryoSat‐2 Altimetry 第一作者及单位:汪志伟(硕士研究生 南方科技大学环境学院) 通讯作者及单位:姜丽光(助理教…

ABB 控制柜

1,主计算机:相当于电脑的主机,用于存放系统和数据,需要24V直流电才能工作。执行用户编写的程序,控制机器人进行响应的动作。主计算机有很多接口,比如与编程PC连接的服务网口、用于连接示教器的网口、连接轴计算机板的接口、连接安全面板的接口、不同的现场总线卡接口(比…