菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数

这篇具有很好参考价值的文章主要介绍了菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔记带有个人侧重点,不追求面面俱到。

1 命令行参数

出处: 菜鸟教程 - Python3 命令行参数

1.1 基础用法

Python 中可以所用 syssys.argv 来获取命令行参数:

注意: sys.argv[0] 为脚本名。

实例:

test.py 文件:

#!/usr/bin/python3

import sys

print ('参数个数为:', len(sys.argv), '个参数。')
print ('参数列表:', str(sys.argv))
print ('脚本名:', str(sys.argv[0]))

运行结果:

>> python test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
脚本名: test.py

1.2 getopt 模块

getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数。该模块提供了两个方法及一个异常处理来解析命令行参数。

1.2.1 getopt.getopt 方法

语法:

getopt.getopt(args, shortopts, longopts=[])

参数:

  • args:要解析的命令行参数列表;
  • shortopts:接收字符串,解析为“短选项”。shortopts 后的冒号 : 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数;
  • longopts:接收列表,解析为“长选项”。longopts 后的等号 = 表示如果设置该选项,必须有附加的参数,否则就不附加参数。

返回值:

  • opts:由元组 (opt, value) 组成的列表。例如输入"-h -i inputfile -o outputfile" 返回值就是 [(‘-h’, ‘’), (‘-i’, ‘inputfile’), (‘-o’, ‘outputfile’)];
  • args:参数(value)列表,包含除了长选项和短选项以及各自选项的参数以外的其他未知的参数。

注意:

  1. 长选项和短选项以及各自的参数都会按先后次序放在 opts 中;
  2. 返回的 opt 里面,--- 都被保留下来了;
  3. 长选项没有写完的时候,会被自动补全。比如用户输入的是 --u,通过 getopt 会被自动补全--user

实例:

# test.py

import sys
import getopt

def site():
    argv = sys.argv[1:]  # 以空格分割的字符串列表

    try:
        opts, args = getopt.getopt(argv, "abn:u:", ["name=", "url="])# 长选项模式
    except Exception as err:
        print(err)

    print("opts: ", opts)
    print("args: ", args)


if __name__ == "__main__":
    site()

输出:

1)正常使用

>>> python test.py -a -b -u item1 -n item2 --n item3 --url item4
opts:  [('-a', ''), ('-b', ''), ('-u', 'item1'), ('-n', 'item2'), ('--name', 'item3'), ('--url', 'item4')]
args:  []

2)只输入参数

>>> python test.py item1 item2
opts:  []
args:  ['item1', 'item2']

3)只输入选项

>>> python test.py -a
opts:  [('-a', '')]
args:  []

>>> python test.py -n
option -n requires argument  # 报错

4)错误输入选项

>>> python test.py -
opts:  []
args:  ['-']

>>> python test.py --
opts:  []
args:  []

>>> python test.py ---
option --- not recognized  # 报错

>>> python test.py -c
option -c not recognized  # 报错

>>> python test.py ---b
option ---b not recognized  # 报错

>>> python test.py -n-a
opts:  [('-n', '-a')]
args:  []

>>> python test.py -a-n
option -- not recognized  # 报错

>>> python test.py -a--n
option -- not recognized  # 报错

5)错误输入参数

>>> python test.py -a item
opts:  [('-a', '')]
args:  ['item']

>>> python test.py -aitem
option -i not recognized  # 报错

>>> python test.py -antem
opts:  [('-a', ''), ('-n', 'tem')]
args:  []

>>> python test.py -abntem
opts:  [('-a', ''), ('-b', ''), ('-n', 'tem')]
args:  []

>>> python test.py -acntem
option -c not recognized

>>> python test.py -n item1 -a item2 --n item3
opts:  [('-n', 'item1'), ('-a', '')]
args:  ['item2', '--n', 'item3']

>>> python test.py -n item1 item2 -a
opts:  [('-n', 'item1')]
args:  ['item2', '-a']

>>> python test.py item1 item2 -a
opts:  []
args:  ['item1', 'item2', '-a']

总结:欢迎指正、补充

  1. 命令行参数从左到右、依次解析
  2. 一般情况下以空格分割选项和参数,附加参数的短选项后紧跟的参数也可以被解析,例如:-nitem
  3. 解析时,先碰到未定义的选项时,会报错,先碰到多余的参数时,之后的参数都被放入返回值 args 中;
  4. 短选项可以采用 -abn 的样式输入,无附加参数的选项必须在前,否则会报错。

1.2.2 getopt.gnu_getopt 方法

语法:

getopt.gnu_getopt(args, shortopts, longopts=[])

此函数与 getopt() 类似,区别在于它默认使用 GNU 风格的扫描模式。这意味着选项和非选项参数可能会混在一起。getopt() 函数将在遇到非选项参数时立即停止处理选项。

如果选项字符串的第一个字符为 +,或者如果设置了环境变量 POSIXLY_CORRECT,则选项处理会在遇到非选项参数时立即停止。

1.2.3 Exception getopt.GetoptError

当参数列表中出现不可识别的选项或者当一个需要参数的选项未带参数时将引发此异常。此异常的参数是一个指明错误原因的字符串

对于长选项,将一个参数传给不需要参数的选项也将导致引发此异常。(没发现)

msg 和 opt 属性会给出错误消息和关联的选项;如果没有关联到异常的特定选项,则 opt 将为空字符串。

报错 1:

需要参数的选项未带参数。

报错 2:

如果 longopts 为 [‘foo’, ‘frob’],则选项 --fo 将匹配为 --foo,但 --f 将不能得到唯一匹配,因此将引发 GetoptError。

1.2.4 exception getopt.error

GetoptError 的别名,用于向后兼容。

扩展阅读: 《Python 官方文档》:getopt — C 风格的命令行选项解析器文章来源地址https://www.toymoban.com/news/detail-691862.html

到了这里,关于菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 菜鸟教程《Python 3 教程》笔记(12):推导式

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 推导式 扩展阅读: Python 中的列表推导式 参考 12.1 列表推导式,将 [] 替换为 {} 。 注意: 元组推导式返回的结果是一个生成器对象。

    2024年02月10日
    浏览(34)
  • 菜鸟教程《Python 3 教程》笔记(19):错误与异常

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 错误和异常 Python 有两种错误很容易辨认: 语法错误 和 异常 。 assert (断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待

    2024年02月09日
    浏览(37)
  • 菜鸟教程《Python 3 教程》笔记(15):数据结构

    笔记带有个人侧重点,不追求面面俱到。 出处: 菜鸟教程 - Python3 数据结构 在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。 遍历字典: 遍历列表: 遍历多个序列: 反向遍历:

    2024年02月10日
    浏览(32)
  • 菜鸟教程笔记:TypeScript

    1.在ts文件中:Runoob.ts 2.通过tsc命令编译 3.得到js代码:Runoob.js 4.使用node来执行js代码 我们可以同时编译多个ts文件: ts会忽略 空格 , 制表符 , 换行符 理解:对现实世界理解和抽象的方法 面向对象有两个概念:对象和类 对象:类的一个实例,有状态和行为。 类:是一个模板

    2024年02月07日
    浏览(35)
  • Python 3 | 菜鸟教程 (一)

    目录 一、Python3 简介 二、Python 发展历史 三、Python 特点 (一)易于学习 (二)易于阅读 (三)易于维护 (四)一个广泛的标准库 (五)互动模式 (六)可移植 (七)可扩展 (八)数据库 (九)GUI编程 (十)可嵌入 四、Python 应用 五、 Python3 环境搭建 六、Python3 下载 七

    2024年02月09日
    浏览(33)
  • Python教程_编程入门自学教程_菜鸟教程-免费教程分享

    Python - 教程 Python - 概述 Python - 环境设置 Python - 基本语法 Python - 变量类型 Python - 基本运算符 Python - 决策 Python - 循环 Python - 数字 Python - 字符串 Python - 列表 Python - 元组 Python - 字典 Python - 日期和时间 Python - 功能 Python - 模块 Python - 文件I / O. Python - 异常处理 Python - 面向对象

    2024年02月02日
    浏览(36)
  • python菜鸟教程-矩阵对应位置相加

    两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵: X = [[12,7,3],     [4 ,5,6],     [7 ,8,9]] Y = [[5,8,1],     [6,7,3],     [4,5,9]] 程序分析:创建一个新的 3 行 3 列的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。

    2024年04月23日
    浏览(45)
  • Python3 函数与数据结构 | 菜鸟教程(十一)

    目录 一、Python3 函数 (一)定义一个函数 1、你可以定义一个由自己想要功能的函数,以下是简单的规则:  2、语法 3、实例 ①让我们使用函数来输出\\\"Hello World!\\\": ②更复杂点的应用,函数中带上参数变量: Ⅰ实例:比较两个数,并返回较大的数: Ⅱ实例:计算面积函数: (

    2024年02月11日
    浏览(32)
  • 使用Python pymysql连接Mysql数据库-菜鸟教程

    1、安装pymysql模块 pip install pymysql 2、启动Mysql数据库服务 net start mysql80  3、连接数据库 运行结果如下  4、创建数据库表 执行成功后,在本地登录mysql数据库进行查看验证   5、数据库插入操作  执行程序后在本地查看验证  6、数据库查询操作 Python查询Mysql使用 fetchone() 方法

    2024年02月04日
    浏览(36)
  • MySQL 教程---菜鸟教程

    关系型数据库管理系统(RDBMS) RDBMS 术语: 数据库:数据库是一些关联表的集合。 数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。 列:一列包含了相同类型的数据,例如邮政编码的数据。 行:一行是一组相关的数据,例如一条用户订阅的数据

    2024年04月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包