用python写一个专业的传参脚本

简介:

问:linux系统命令如ls,它有几十个参数,可带一个或多个参数,可不分先后,用起来是非常的专业。但是自己写的传参脚本,一般只传一个参数,如果传多个,也是固定的顺序,那么如何用python写出更专业的传参脚本呢?

答:使用python自带的getopt模块。

 

1、语法:

import getopt

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

#函数示例:getopt.getopt(sys.argv[1:],'u:p:P:h',["username=","password=","port=","help"])

#输出格式:[('-p', '123'),('-u', 'root')]  []   #后面中括号包含没有"-"或"--"的参数

 

2、参数说明:

args      所有传参参数,一般用sys.argv[1:]表示,即所有传参内容;

shortopts短格式,一般参数如-u,-p,-h等(一个"-"的)就是短格式;那写在函数中就是"u:p:P:h",有冒号代表有参数,没冒号代表没参数。

longopts  长格式,一般参数如--username,--password,--help等(两个"-"的)就是长格式;那写在函数中就是["usrname=",'password=","help"],其中--help是没有值的,所以没有等于号。其它有等于号,表示后面需要参数。

 

3、演示效果:

短格式传参:

[root@yang scripts]# python   getopt_test.py -u yangyun -p 123456 -P 2222

username: yangyun

password: 123456

port: 2222

 

长格式传参:(也可以加=号)

[root@yang scripts]# python   getopt_test.py  --username yangyun   --password 123456 --port 2222

username: yangyun

password: 123456

port: 2222

 

长短格式都用:

[root@yang scripts]# python   getopt_test.py  --username=yangyun -p 123456   --port 2222

username: yangyun

password: 123456

port: 2222

 

只传单个参数,其它是默认值:

[root@yang scripts]# python   getopt_test.py  -p 123456

username: root

password: 123456

port: 22

#此处port与user都用的默认值,默认值在函数里指定

 

4python传参脚本实例:

# cat  getopt_test.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/python
#by yangyun 2015-1-11
  
import  getopt 
import  sys
#导入getopt,sys模块
  
#定义帮助函数
def  help ():
         print  "Usage error!"
         sys.exit()
  
#输出用户名
def  username(username):
         print  'username:' ,username
  
#输出密码
def  password(password):
         if  not  password:
                 help ()
         else :
                 print  'password:' ,password
  
#输出端口
def  port(port):
         print  'port:' ,port
  
#获取传参内容,短格式为-u,-p,-P,-h,其中-h不需要传值。
#长格式为--username,--password,--port,--help,长格式--help不需要传值。
opts,args = getopt.getopt(sys.argv[ 1 :], 'u:p:P:h' ,[ "username=" , "password=" , "port=" , "help" ])
  
#print opts,'   ' ,args
#设置默认值变量,当没有传参时就会使用默认值。
username_value = "root"
port_value = '22'
password_value = ''     #密码不使用默认值,所以定义空。
  
#循环参数列表,输出格式为:[('-p','123'), ('-u', 'root')]     []
  
for  opt,value  in  opts:
         if  opt  in ( "-u" , "--username" ):
                 username_value = value
                 #如果有传参,则重新赋值。
         if  opt  in ( "-p" , "--password" ):
                 password_value = value
         if  opt  in ( "-P" , "--port" ):
                 port_value = value
         if  opt  in ( "-h" , "--help" ):
                 help ()
  
#执行输出用户名、密码、端口的函数,如果有变量没有传值,则使用默认值。
username(username_value)
password(password_value)
port(port_value)


 

 




     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1603634,如需转载请自行联系原作者




相关文章
|
4小时前
|
安全 Python
轻松学会的Python红绿灯控制技巧,专业又精确
轻松学会的Python红绿灯控制技巧,专业又精确
25 0
|
4小时前
|
数据采集 Web App开发 数据可视化
Python爬取猫眼电影专业评分数据中的应用案例
Python爬取猫眼电影专业评分数据中的应用案例
|
10月前
|
存储 网络协议 开发者
[oeasy]python0074[专业选修]字节序_byte_order_struct_pack_大端序_小端序
[oeasy]python0074[专业选修]字节序_byte_order_struct_pack_大端序_小端序
43 0
|
11月前
|
Java 索引 Python
你做的 9 件事表明你不是专业的 Python 开发人员
你做的 9 件事表明你不是专业的 Python 开发人员
46 0
|
存储 开发工具 数据安全/隐私保护
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
82 0
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
|
Python 容器
对于python命令行,你应该这么做才专业
在python开发中,我们经常会遇到在执行.py文件时,需要给代码传参的情况。 遇到传参的场景,最基础的传参方式为*.py argv1 argv2 ...,然后我们在代码中通过sya.argv来解析入参。 这样使用没有问题,但是不严谨、不正式,更不够帅气...谁知道你这些参数是干嘛的? 其实python基于sys.argv的命令行参数,存在三个模块getopt --> optprase --> argprase。今天咱们来说说处于命令行模块顶峰的argprase! 入门五板斧
151 0
|
数据挖掘 数据处理 Python
用Python绘制专业的K线图【含源代码】
使用Python绘制一幅专业的K线图,是量化投资和金融数据分析的必备功课。下面我将从K线图简介、数据获取、K线图绘制及成交量绘制等方面,结合源代码,一步步实现专业K线图的绘制。
998 0
用Python绘制专业的K线图【含源代码】
|
IDE Linux 开发工具
PyCharm:适用于专业开发人员的Python IDE
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/78975666 PyCharm:适用于专业开发人员的Python IDE 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。
3141 0