zoukankan      html  css  js  c++  java
  • 如何编写一个带命令行参数的Python文件

    看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来、牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命令行参数。

    首先你要知道python中的sys模块的一些功能:

    复制代码
    import sys
    
    print "the number of python program's argument:",len(sys.argv)
    
    print "the value of every argument is ",str(sys.argv)
    
    #上述程序的文件名sysargv.py
    python sysargv.py argv1 argv2 argv3 argv4
    the number of python program's argument: 5
    the value of every argument is  ['sysargv.py', 'argv1', 'argv2', 'argv3', 'argv4']
    复制代码

    其次,python程序使用命令行参数,必不可少的模块,就是getopt 模块,先看看一段代码

    getopt.getopt(argsoptions[, long_options])
    复制代码
    import getopt
    args = '-a -b -cfoo -d bar a1 a2'.split()
    args
    ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
    optlist, args = getopt.getopt(args, 'abc:d:')
    optlist
    [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
    args
    ['a1', 'a2']
    复制代码

    使用long_options

    复制代码
    s = '--condition=foo --testing --output-file abc.def -x a1 a2'
    args = s.split()
    args
    ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
    optlist, args = getopt.getopt(args, 'x', ['condition=', 'output-file=', 'testing'])
    optlist
    [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
    args
    ['a1', 'a2']
    复制代码

    最后实战一个例子吧!

    复制代码
    import getopt,sys
    
    def main():
        try:
            opts,args=getopt.getopt(sys.argv[1:],"hi:o:v",["help","infile=","outfile="])
        except getopt.GetoptError as error:
            print str(error)
            usage()
            sys.exit(2)
        infile=None
        output=None
        verbose=False
        for key,value in opts:
            if key=="-v":
                verbose=True
            elif key in ("-h","--help"):
                print "sysargv.py -i <inputfile> -o <outputfile>"
                print "or sysargv.py --infile <inputfile> --outfile <outputfile>"
    
            elif key in ("-i","--infile"):
                infile = value
            elif key in ("-o","--outfile"):
                output= value
        print "inputfile:", infile
        print  "outputfile:", output
        print  verbose
    if __name__=="__main__":
        main()
    复制代码

    测试结果:

    复制代码
    C:Python27>python sysargv.py --help
    sysargv.py -i <inputfile> -o <outputfile>
    or sysargv.py --infile <inputfile> --outfile <outputfile>
    inputfile: None
    outputfile: None
    False
    
    C:Python27>python sysargv.py -h
    sysargv.py -i <inputfile> -o <outputfile>
    or sysargv.py --infile <inputfile> --outfile <outputfile>
    inputfile: None
    outputfile: None
    False
    
    C:Python27>python sysargv.py -i "inputfile1" -o "ouputfile2"
    inputfile: inputfile1
    outputfile: ouputfile2
    False
    
    C:Python27>python sysargv.py -i "inputfile1"
    inputfile: inputfile1
    outputfile: None
    False
    
    
    C:Python27>python sysargv.py -o "outputfile1"
    inputfile: None
    outputfile: outputfile1
    False
    
    C:Python27>python sysargv.py -o "outputfile1" -v
    inputfile: None
    outputfile: outputfile1
    True
    
    
    
    C:Python27>python sysargv.py --infile "inputfile" --outfile "outputfile1" -v
    inputfile: inputfile
    outputfile: outputfile1
    True
    复制代码
  • 相关阅读:
    spring的控制器如何传递数据到视图
    spring的控制器如何获取参数
    thymeleaf的官方网站
    如何编写spring mvc 项目
    如何创建spring web 工程(maven工程)
    如何下载spring sts
    使用请求包装器RequestWrapper 对博客内容进行编码
    使用apache-commons-lang3架构对HTML内容进行编码和反编码
    (转)Nginx+Php-fpm运行原理详解
    (转)FastCgi与PHP-fpm之间是个什么样的关系
  • 原文地址:https://www.cnblogs.com/shitaotao/p/7609989.html
Copyright © 2011-2022 走看看