标题写了那么久,现在现在才有时间,整理下自己的思路。首先先总结下自己对sys模块的理解。手册上对sys的描述是系统参数和系统函数,这里的系统实际上是python解释器。这个模块提供了用户可以访问的解释器变量和一些可以与解释器进行交互的功能函数。这里主要关注的就是sys.argv,其实它就是一个解释器变量,通过sys模块,我们就可以访问,并且根据自己的需要来解析。

sys.argv

描述:记录命令行参数
类别:列表(可以使用列表方法来访问)
我用的系统是RHL 5.3,python 版本为2.4,写了个测试程序PyTest.py来观察python解释器调用时,sys.agrv的元素的值:

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. import sys
  3. def main(argv):
  4. for arg in argv:
  5. print arg
  6. if __name__ == '__main__':
  7. main(sys.argv)
那我们开始调用测试脚本:
  1. python PyTest.py 输出结果:PyTest.py, 原始列表为['PyTest.py']
  2. python PyTest.py -c 0 a:1:b 输出结果为:PyTest.py -c 0 a:1:b。说明解释器是以空格或者制表符来区分参数。
  3. python /root/python_scripts/PyTest.py 输出结果为: /root/python_scripts/PyTest.py。记录的是绝对路径。
  4. chmod +x PyTest.py;./PyTest.py 输出结果为: ./PyTest.py
  5. /root/python_scripts/PyTest.py 输出结果为: /root/python_scripts/PyTest.py
注:说明sys.argv[0]保存的是可执行程序名,后面是命令行参数,以空格为区分点。
下面介绍下C语言风格的命令行解析模块getopt。这个支持短命令(-a)和长命令模式(--add)。getopt的调用方式为:getopt.getopt(args, 'hvo:')或者getopt.getopt(args,'hvo:', ['help', 'version', 'output=']),如果只使用长命令,短命令参数必须是个空字符串。:表示参数后必须有参数,=表示长命令后必须有参数。
示例代码:

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. import sys
  3. import getopt
  4. def Usage():
  5. print 'PyTest.py usage:'
  6. print '-h,--help: print help message.'
  7. print '-v, --version: print script version'
  8. print '-o, --output: input an output verb'
  9. print '--foo: Test option '
  10. print '--fre: another test option'
  11. def Version():
  12. print 'PyTest.py 1.0.0.0.1'
  13. def OutPut(args):
  14. print 'Hello, %s'%args
  15. def main(argv):
  16. try:
  17. opts, args = getopt.getopt(argv[1:], 'hvo:', ['output=', 'foo=', 'fre='])
  18. except getopt.GetoptError, err:
  19. print str(err)
  20. Usage()
  21. sys.exit(2)
  22. for o, a in opts:
  23. if o in ('-h', '--help'):
  24. Usage()
  25. sys.exit(1)
  26. elif o in ('-v', '--version'):
  27. Version()
  28. sys.exit(0)
  29. elif o in ('-o', '--output'):
  30. OutPut(a)
  31. sys.exit(0)
  32. elif o in ('--foo',):
  33. Foo=a
  34. elif o in ('--fre',):
  35. Fre=a
  36. else:
  37. print 'unhandled option'
  38. sys.exit(3)
  39. if __name__ == '__main__':
  40. main(sys.argv)

19行: 调用函数时返回两个列表, 第一个列表保存参数和值的元组集合,第二个列表保存其他值,不在参数指定的所有值。

[root@node5 python_scripts]# ./PyTest.py --f
option --f not a unique prefix
PyTest.py usage:
-h,--help: print help message.
-v, --version: print script version
-o, --output: input an output verb
--foo: Test option 
--fre: another test option
[root@node5 python_scripts]# ./PyTest.py --fo
option --foo requires argument
PyTest.py usage:
-h,--help: print help message.
-v, --version: print script version
-o, --output: input an output verb
--foo: Test option 
--fre: another test option
这两个调用过程可以看到getopt可以进行唯一匹配。
[root@node5 python_scripts]# ./PyTest.py -h -v
PyTest.py usage:
-h,--help: print help message.
-v, --version: print script version
-o, --output: input an output verb
--foo: Test option 
--fre: another test option
[root@node5 python_scripts]# ./PyTest.py -v -h
PyTest.py 1.0.0.0.1
这里可以看到解析顺序从前向后。
[root@node5 python_scripts]# ./PyTest.py -o a --output ab
Hello, a
[root@node5 python_scripts]# ./PyTest.py --output ab -o a
Hello, ab
这里可以看到实际上-o和--output是分开处理的。
从这里我们可以总结下getopt的特点:
1 getopt是从前到后解析
2 getopt不检查额外参数的合法性,需要自行检查
3 短命令行和长命令行是分开解析的。
稍后完善
模块optparse提供了OptionParser用来解析命令行,optparse在2.3引进,2.7弃用,2.7以后用argparse替代。
OptionParser将自动生成帮助信息。
OptionParser的使用过程

点击(此处)折叠或打开

  1. from optparse import OptionParser

导入OptionParser。

点击(此处)折叠或打开

  1. parser = OptionParser()

生成OptionParser的一个实例

点击(此处)折叠或打开

  1. parser.add_option('c', 'clear', dest='clear_option', default=False, action='store_true', help = 'Clean origin configurations and databases.')

添加命令行选项

点击(此处)折叠或打开

  1. (options, args) = parser.parse_args(sys.argv[1:])

解析命令行

options.clear_option 使用命令行。
python 创建目录
os.mkdir()  创建一个非递归目录
os.makedirs() 创建一个递归目录
 
 
 
#!/usr/bin/python
# -*- coding: UTF-8 -*- import sys, getopt def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print '输入的文件为:', inputfile
print '输出的文件为:', outputfile if __name__ == "__main__":
main(sys.argv[1:])

执行以上代码,输出结果为:

$ python test.py -h
usage: test.py -i <inputfile> -o <outputfile> $ python test.py -i inputfile -o outputfile
输入的文件为: inputfile
输出的文件为: outputfile
 

python 处理命令行参数--转载的更多相关文章

  1. python处理命令行参数

    直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...

  2. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  3. Python 的命令行参数处理 optparse->argparse

    optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代. 但是用习惯了optparse,还是很好用的撒. optparse使用起来,相比旧 ...

  4. Python 获得命令行参数的方法

    如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?需要模块:sys参数个数:len(sys.argv)脚本名:    sys.argv[0]参数1 ...

  5. python解析命令行参数

    常常需要解析命令行参数,经常忘记,好烦,总结下来吧. 1.Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表 参数个数:len(sys.a ...

  6. python中命令行参数

    python中的命令行参数 python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问.命令行参数是调用某个程序时除程序名外的其他参数. sys.argv是命令行参数的列表 le ...

  7. Python 中命令行参数解析工具 docopt 安装和应用

    什么是 docopt? 1.docopt 是一种 Python 编写的命令行执行脚本的交互语言. 它是一种语言! 它是一种语言! 它是一种语言! 2.使用这种语言可以在自己的脚本中,添加一些规则限制. ...

  8. Python的命令行参数(argparse)

    参考:https://www.cnblogs.com/lindaxin/p/7975697.html 参考:https://www.cnblogs.com/dengtou/p/8413609.html ...

  9. python之命令行参数解析模块argparse

    """argparse模块使得写用户友好性命令行接口很容易,程序定义所需要的参数,argparse会从ays.argv中提取出这些参数.argparse模块也能自动的产生 ...

随机推荐

  1. 使用浏览器,调试js代码

    1:创建html网页和js文件 <!doctype html> <html> <head> <meta charset="utf-8"&g ...

  2. LeetCode--44 通配符匹配

    题目就是说两个字符串,一个含有通配符,去匹配另一个字符串:输出两个字符串是否一致. 注意:’?’表示匹配任意一个字符,’*’表示匹配任意字符0或者多次 首先,我们想到暴力破解.如果从头到尾的破解,到第 ...

  3. Vim/Vi的使用

     Vim 是vi的加强 Gvim图形化的vim Vim/Vi简介 Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的文本编辑器,他们 的作用是建立,编辑,显示文本文件 Vi ...

  4. js匿名自执行函数中闭包的高级使用(---------------------------******-----------------------------)

    先看看最常见的一个问题: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  5. python使用WSGI接口实现简单网页

    Python Web 介绍 Python的Web服务器分为服务器程序和应用程序.服务器程序负责接收客户端的请求发送给应用程序,应用程序负责处理请求返回给服务器程序.为了方便应用程序的开发,我们把常用的 ...

  6. c++练习-快速排序

    这个例子将长度为r的数列a从按照从小到大作排列 快速排序的思想简单说来就是 在a中依次先选定一个数key,将这个数依次与a中的其他数做对比,如果比key小则放到key前面,如果比key大就放到key后 ...

  7. Intro to Python for Data Science Learning 3 - functions

    Functions from:https://campus.datacamp.com/courses/intro-to-python-for-data-science/chapter-3-functi ...

  8. vue 拨打电话

    <a v-bind:href="'tel:'+(order.orderer.phone)">{{order.orderer.phone}}</a> v-bi ...

  9. VMware前路难测,多个厂家群雄逐鹿

    以VMware为例,虚拟机巨头公布了第二财季报告所示,它第二财季收入同比增长13%,达到了21.7亿美元,而且该公司收入和每股收益均超出预期. 在人们高谈Salesforce.亚马逊等新兴云计算厂商取 ...

  10. ORA-01507: database not mounted

    今天启动数据库时报错了! SQL> startup mount ORACLE instance started. Total System Global Area  608174080 byte ...