python如何实现像shell中的case功能

我们知道在shell脚本里是支持case语句,当位置参数为空时,会提示我们怎么使用脚本

那么在python怎么实现呢?也使用case吗?

python里不支持case语句,但是也有实现case的方法。

这里我们来讲讲getopt模块

介绍说是解析命令行操作

下面是getopt格式:

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

args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv获得

shortopts 是短参数  啥是短参数啊?  类似于 这样:python test.py -h # 输出帮助信息

longopts 是长参数  啥是长参数啊?  类似于 这样:python test.py -help # 输出帮助信息

返回值

这个函数返回是一个两元组的列表(复习一下,元组的值是不可修改的!)

下面我写一个小例子,让你稍微顿悟一下

import getopt
import sys

arg = getopt.getopt(sys.argv[1:],‘-h‘,[‘help‘])
print(arg)

结果如下:

[email protected]:~/python# python3.5 test.py -h
([(‘-h‘, ‘‘)], [])
[email protected]:~/python# python3.5 test.py --help
([(‘--help‘, ‘‘)], [])

可以看到已经接收了参数。并且做了处理,为啥我传入sys.argv[1:]?

因为sys.argv里的argv[0]是当前脚本的文件名,不需要它去参与,要不然你的选项和选项值无法匹配,问题多多。

假设我要接收一个参数+参数值的选项怎么办?

再写个小例子!

 1 #!/usr/bin/env python3.5
 2 import urllib.request
 3 import getopt
 4 import sys
 5
 6 opts,args = getopt.getopt(sys.argv[1:],‘-h-f:-v‘,[‘help‘,‘filename=‘,‘version‘])
 7 for opt_name,opt_value in opts:
 8     if opt_name in (‘-h‘,‘--help‘):
 9         print("[*] Help info")
10         exit()
11     if opt_name in (‘-v‘,‘--version‘):
12         print("[*] Version is 0.01 ")
13         exit()
14     if opt_name in (‘-f‘,‘--filename‘):
15         fileName = opt_value
16         print("[*] Filename is ",fileName)
17         # do something
18         exit()

运行测试结果如下:

[email protected]:~/python# python3.5 test.py --filename=test
[*] Filename is  test
[email protected]:~/python# python3.5 test.py --filename=
[*] Filename is
[email protected]:~/python# python3.5 test.py --help
[*] Help info
[email protected]:~/python# python3.5 test.py --version
[*] Version is 0.01
[email protected]:~/python# python3.5 test.py -v
[*] Version is 0.01
[email protected]:~/python# python3.5 test.py -f test
[*] Filename is  test
[email protected]:~/python#

来详细解释一下这几行代码

首先从短参数名开始。

我定义了‘-h-f:-v‘ 大家发现没有,在-f后面多了一个":"

这个":"代表了当前参数是有值的,是一个参数名+参数值的参数

如果我再加一个-o: 那么证明-o后面是可以接收一个值,这个值就是-o的参数值,将会保存到opts变量中。

长参数名的方式和短参数差不多,唯一的区别就是长参数如果要接收值,那必须得在后面加上一个"="

时间: 2024-11-13 13:10:33

python如何实现像shell中的case功能的相关文章

shell中的case语句

shell中case语法如下: case word in pattern1) Statement(s) to be execute if pattern1 matchs ;; pattern2) Statement(s) to be execute if pattern2 matchs ;; pattern3) Statement(s) to be execute if pattern3 matchs ;; *) Default action ;; esac [注]pattern模式不能包含元字

Shell脚本的逻辑判断、if文件目录属性判断、if的特殊用法、Shell中的case判断

Shell脚本的逻辑判断 if文件目录属性判断 if的特殊用法 Shenll中的case判断 原文地址:http://blog.51cto.com/13515599/2106533

shell中的变量功能

本地变量: set VARNAME=VALUE:作用域为整个bash进程 局部变量: local VARNAME=VALUE:作用域为当前代码段 环境变量: export VARNAME=VALUE 或者    VARNAME=VALUE                      export VARNAME 位置变量: $1   $2    ...... 特殊变量 : $? :上一条命令的执行状态返回值 程序执行,可能有两类返回值:1.程序执行结果,2程序状态返回代码(0-255),其中0是正

Shell中的case命令

case语句和判断语句[if...elif...else]功能类似;当在逻辑判断比较简单的情况下,比后者的代码量要少许多.case用法,用变量来匹配某值,如果匹配成功则执行它下面的命令,直到 ::为止 #!/bin/bash # a=20 #定义变量值 case $a in #若变量在下面的某值中,则执行它下面的命令 10) #值内容 可以加上 | ,可以有多个值 { echo "the a is 10" #执行输出命令 echo "over" #执行输出命令 }

SHELL中的case流程控制

case流控制: case结构用于多种情况的条件判断.类似于其他编程语言中的switch/case语句,但从语法形式上讲,有很大的不同. case 字符串 in 模式) 语句 ;; 模式2 | 模式3) 语句 ;; *) 默认执行的 语句 ;; esac 提示:esac就是case反过来写. break和continue break命令允许跳出循环.break通常在进行一些处理后退出循环或case语句.如果是在一 个嵌入循环里,可以指定跳出的循环个数.例如如果在两层循环内,用break 2刚好跳

shell中的case表达式

语法格式 case var in pattern1 | patter2) command1 command2;; pattern3) command1 command2;; *) default command1 default command2;; esac 需要注意的是: 1)pattern可以包含通配符 2)语句中的;;括号类似于C语言中的break

python3-file的修改实现类似shell中sed的功能

# Auther: Aaron Fan '''思路:目的是为了修改yesterday这个文件,但是因为无法直接去修改这个文件,所以需要先把修改好的内容写入高yesterday.new这个文件中,然后再把yesterday.new的内容覆盖到yesterday这个文件中 f = open('yesterday','r',encoding='utf-8')f_new = open('yesterday.new','w',encoding='utf-8') for line in f: if "肆意的

(九)shell中case语句、程序传参、while

2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同.shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break). 2.2.6.2.调用shell程序的传参(1)C语言中可以通过main函数的argc和argv给程序传参(详情参考<4.

Linux下shell中case命令详解(常规的break、无条件继续和有条件继续)

linux下shell中的case名字和C/C++中的switch类似,但是shell中的case更强大和复杂. 1.强大主要体现在:shell中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式. 2.复杂主要体现在:shell中case的每一个项后有三个选择:break(常规的break).unconditional follow up(无条件继续)和conditional follow up(有条件继续). 这篇文章的重点是上面的第2点. case的无条件继续和有条件继续是b