编写带命令行参数的 Python 程序

举报
远航 | FIBOS 发表于 2020/12/01 00:24:10 2020/12/01
【摘要】 我们在安装一些 Python 程序的时候经常会输入这样的命令行语句 python setup.py install,从这条语句中我们可以看到 setup.py 是一个 Python 程序,但是其中的 install 又是什么呢?其实它就是这个 Python 程序的命令行参数。在这篇文章中我会和大家探讨 Python 程序中命令行参数的工作机制和如何去编写一个带命令...

我们在安装一些 Python 程序的时候经常会输入这样的命令行语句 python setup.py install,从这条语句中我们可以看到 setup.py 是一个 Python 程序,但是其中的 install 又是什么呢?其实它就是这个 Python 程序的命令行参数。在这篇文章中我会和大家探讨 Python 程序中命令行参数的工作机制和如何去编写一个带命令行参数的 Python 程序。

Python 是如何识别出命令行参数的

sys 模块

在 Python 中,sys 模块是一个非常常用且十分重要的模块,通过模块中的 sys.argv 就可以访问到所有的命令行参数,它的返回值是包含所有命令行参数的列表(list),下面我们通过程序来说明它的用法:


import sys

print 'Number of arguments:', len(sys.argv)

print 'They are:', str(sys.argv)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行以及结果:

python ./test_argv.py arg0 arg1 arg2
Number of arguments: 4
They are: ['./test_argv.py', 'arg0', 'arg1', 'arg2']
  
 
  • 1
  • 2
  • 3

我们看到通过 sys.argv 我们可以获得运行 Python 程序中所有的命令行参数。

getopt 模块

谈到 Python 的命令行参数,有一个模块是不得不提的,那就是 getopt,我们先来看一下这个函数:

getopt.getopt(args, options[, long_options])

我们先来看一下里面参数的含义:

  • args: 表示的是要被处理的命令行参数列表(通常是通过上述的 sys.argv 获得的结果)

  • options: 它表示的是命令行参数中的选项,通常是一个字母,就像我们在 Linux 中对于某个命令不熟悉时所使用的帮助选项-h一样。如果说该选项需要一个参数的话,需要在该字母后边加上一个冒号:,表示该选项需要一个参数(如果这句不明白可以看下边的示例程序)

  • long_options: 它是一个可选的参数,表示的是选项的长格式,上边的options是短格式,长格式的选项的参数格式示例为--input=input.txt,具体如何使用,详见下边的示例程序。

编写一个带命令行的 Python 程序

了解了 sys 模块和 getopt 模块,我们就可以来自己编写一个带有命令行的程序并且在该程序中,我们还使用了 getopt.GetoptError 来进行异常处理。代码如下:

# -*- coding:utf-8 -*- 

import sys, getopt

def main(argv): inputfile = "" outputfile = "" try: # 这里的 h 就表示该选项无参数,i:表示 i 选项后需要有参数 opts, args = getopt.getopt(argv, "hi:o:",["infile=", "outfile="]) except getopt.GetoptError: print 'Error: test_arg.py -i <inputfile> -o <outputfile>' print '   or: test_arg.py --infile=<inputfile> --outfile=<outputfile>' sys.exit(2) for opt, arg in opts: if opt == "-h": print 'test_arg.py -i <inputfile> -o <outputfile>' print 'or: test_arg.py --infile=<inputfile> --outfile=<outputfile>' sys.exit() elif opt in ("-i", "--infile"): inputfile = arg elif opt in ("-o", "--outfile"): outputfile = arg print 'Input file : ', inputfile print 'Output file: ', outputfile

if __name__ == "__main__": main(sys.argv[1:])

  
 
  • 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

运行结果:

./test_arg.py
Input file :
Output file:

  
 
  • 1
  • 2
  • 3
  • 4
python ./test_arg.py -h
test_arg.py -i <inputfile> -o <outputfile>
or: test_arg.py --infile=<inputfile> --outfile=<outputfile>
  
 
  • 1
  • 2
  • 3
python ./test_arg.py -a
Error: test_arg.py -i <inputfile> -o <outputfile> or: test_arg.py --infile=<inputfile> --outfile=<outputfile>
  
 
  • 1
  • 2
  • 3
python ./test_arg.py -i in.txt -o out.txt
Input file :  in.txt
Output file:  out.txt
  
 
  • 1
  • 2
  • 3
Cookies  python ./test_arg.py --infile=in.txt
Input file :  in.txt
Output file:
  
 
  • 1
  • 2
  • 3

本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!

文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/50755487

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。