有的时候需要用到对命令行中的参数进行捕获的需要,Python 有两种方式可以实现,一是使用基础包 sys 进行实现,二是可以使用更高级有效的函数 getopt 进行实现。
1. sys 模块
Python sys模块通过sys.argv提供对任何命令行参数的访问。这有两个常用指令:
-
sys.argv 返回的是包含命令行参数的一个 list
-
len(sys.argv) 返回的是命令行参数的个数
#!/usr/bin/python
import sys
print('Number of arguments:'+ len(sys.argv) + ' arguments.')
print('Argument List:', str(sys.argv)
cmd 直接以下命令:
python test.py arg1 arg2 arg3
可返回如下结果:
Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
返回的第一个参数永远是文件名,且会被计入参数个数中。
2. getopt 模块
Python 提供了一个 getopt 模块,可以帮助解析命令行选项和参数。此模块提供了两个函数和一个例外,以启用命令行参数解析。
2.1 getopt.getopt 方法
此方法解析命令行选项和参数列表。 以下是此方法的简单语法:
getopt.getopt(args, options, [long_options])
- args - 这是要解析的参数列表。
- options - 这是脚本要识别的选项字母字符串,需要参数的选项后面应跟冒号(:)。
- long_options - 这是可选参数,如果指定,则必须是具有long选项名称的字符串列表,应该支持这些字符串。 需要参数的长选项后面应该跟一个等号('=')。 要仅接受长选项,选项应为空字符串。
- 此方法返回由两个元素组成的值:第一个是(选项,值)对的列表。 第二个是剥离选项列表后剩下的程序参数列表。
- 返回的每个选项和值对都有选项作为其第一个元素,前缀为短选项的连字符(例如,' - x')或长选项的两个连字符(例如,' - long-option')。
2.2 Exception getopt.GetoptError
当在参数列表中找到无法识别的选项或者没有给出需要参数的选项时,会引发此问题。异常的参数是一个表示错误原因的字符串。msg 和 opt 属性提供错误消息和相关选项。考虑我们想通过命令行传递两个文件名,我们还想提供一个选项来检查脚本的用法。脚本的用法如下:
usage: test.py -i <inputfile> -o <outputfile>
以下是 test.py 的脚本:
#!/usr/bin/python
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('Input file is "', inputfile)
print('Output file is "', outputfile)
if __name__ == "__main__":
main(sys.argv[1:])