命令行解析器浅解

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时会提醒你)

python 复制代码
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
'''
python 复制代码
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 复制代码
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文件内容是:

bash 复制代码
python test1.py --length 20 --wigth 10

.sh文件中还可以写:

bash 复制代码
#! /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博客
小结

  • 解析器是分析和处理输入数据的程序或组件。

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

相关推荐
龙哥说跨境28 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
小白学大数据44 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman9111 小时前
python在word中插入图片
python·microsoft·自动化·word
菜鸟的人工智能之路1 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷3 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover4 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
API快乐传递者5 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃7 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
丕羽10 小时前
【Pytorch】基本语法
人工智能·pytorch·python