Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7888551
  • 博文数量: 701
  • 博客积分: 2150
  • 博客等级: 上尉
  • 技术积分: 13233
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-29 16:28
个人简介

天行健,君子以自强不息!

文章分类

全部博文(701)

文章存档

2019年(2)

2018年(12)

2017年(76)

2016年(120)

2015年(178)

2014年(129)

2013年(123)

2012年(61)

分类: Python/Ruby

2014-09-01 18:33:21

一、sys.argv[]

包含命令行参数的字符串列表,通过下标获取参数。
例如:
#!/usr/bin/python  
# Filename: using_sys.py   
import sys  
 
print 'The command line arguments are:'  
for i in sys.argv:  
    print i  
    
print '\n\nThe PYTHONPATH is', sys.path, '\n'  
print argv[1]  

argv[0]表示文件本身路径。 当然,agv[]也可存放多个值

二、getopt

用于抽出命令行选项和参数,也就是sys.argv。
命令行选项使得程序的参数更加灵活。支持短选项模式和长选项模式。

import getopt  
#python scriptname.py -f 'hello' --directory-prefix=/home -t --form    at 'a' 'b'  

shortargs = 'f:t'  
longargs = ['directory-prefix=', 'format', '--f_long=']  
opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )  
 
getopt函数的格式是getopt.getopt ( [命令行参数列表], "短选项", [长选项列表] )
短选项名后的冒号(:)表示该选项必须有附加的参数。
长选项名后的等号(=)表示该选项必须有附加的参数。
返回opts和args。
 
opts是一个参数选项及其value的元组( ( '-f', 'hello'), ( '-t', '' ), ( '--format', '' ), ( '--directory-prefix', '/home' ) )
args是一个除去有用参数外其他的命令行输入 ( 'a', 'b' )
 然后遍历opts便可以获取所有的命令行选项及其对应参数了。
 
遍历opts可以获取所有命令的选项及参数,
for opt, val in opts:  
    if opt in ( '-f', '--f_long' ):  
        pass  
    if ....  


分析不同参数,做不同处理。 一般,选项参数列表会被打印作为帮助选项。

三、python Documentation中也给出了getopt的典型使用方法:

import getopt, sys  

def main():  
    try:  
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])  
    except getopt.GetoptError, err:  
        # print help information and exit:  
        print str(err) # will print something like "option -a not recognized"  
        usage()  
        sys.exit(2)  
    output = None  
    verbose = False  
    for o, a in opts:  
        if o == "-v":  
            verbose = True  
        elif o in ("-h", "--help"):  
            usage()  
            sys.exit()  
        elif o in ("-o", "--output"):  
            output = a  
        else:  
            assert False, "unhandled option"  
    # ...  
  
if __name__ == "__main__":  
    main()  

四、示例应用

一个简单的例子见下:
import getopt, sys 


opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input=", "output="])


def usage():
        print sys.argv[0] + ' -i inputfile -o outputfile'
        print sys.argv[0] + ' -h #get help info'


input_file, output_file = '', ''
for op, value in opts:
        if op == '-i' or op == '--input':
                input_file = value
        elif op == '-o' or op == '--output':
                output_file = value
        elif op == '-h':
                usage()
                sys.exit()


在命令行中运行的形式可以为以下几种:
$ python test.py -i ./input.txt -o ./output.txt
$ python test.py --input=./input.txt -o ./output.txt
$ python test.py -i ./input.txt --output=./output.txt
$ python test.py --input=./input.txt --output=./output.txt
$ python test.py -h

阅读(8619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~