📜  Python命令行参数

📅  最后修改于: 2020-10-28 01:15:25             🧑  作者: Mango

Python命令行参数

Python支持可以在命令行上运行的程序,并带有命令行参数。输入参数在执行时需要传递给脚本。

这意味着要与脚本的命令行界面进行交互。

它提供了一个getopt模块,可以在其中解析命令行参数和选项。

什么是论点传递?

命令ls通常用于获取特定目录中存在的文件和文件夹的摘要。

为什么要使用argparse?

它意味着在程序的编写者和用户之间进行通信,而无需进入代码并更改脚本。它使用户能够输入命令行参数。

访问命令行参数

Python sys模块可通过sys.argv访问命令行参数。它解决了两个目的:

Python sys模块

从早期开始,它是Python发行版附带的基本模块。这与使用argc / argv访问参数的C库类似。 sys模块在名为sys.argv的简单列表结构中实现命令行参数。

每个列表元素代表一个参数。第一个-sys.argv [0]-是Python脚本的名称。其他列表元素是sys.argv [1]到sys.argv [n]-是命令行参数2到n。作为参数之间的分隔符,使用了空格。因此,必须对其中包含空格的参数值进行引用。

它将命令行参数存储到列表中;我们可以使用sys.argv访问它。这非常有用,并且是一种将命令行参数读取为String的简单方法。

import sys
print(type(sys.argv))
print('The command line arguments are:')
for i in sys.argv:
print(i)

Python getopt模块

Python getopt模块通过参数验证扩展了输入字符串的分隔。基于getopt C函数,它允许长短选项,包括值分配。

与解析命令行参数的C getopt()函数非常相似。

它在解析命令行参数时非常有用,我们希望用户在此输入一些选项。

import getopt
import sys
argv = sys.argv[1:]
try:
    opts, args = getopt.getopt(argv, 'hm:d', ['help', 'my_file='])
    print(opts)
    print(args)
except getopt.GetoptError:
    # Print a message or do something useful
    print('Something went wrong!')
    sys.exit(2)

Python argparse模块

它提供具有标准化输出的命令行界面,而前两种解决方案将大部分工作交给您。 argparse允许使用UNIX或GNU样式的名称检查来验证固定和可选参数。这是解析命令行参数的首选方法。它提供了很多选项,例如位置参数,参数的默认值,帮助消息,指定参数的数据类型等。

它使编写用户友好的命令行界面变得容易。当用户向程序提供无效参数时,它会自动生成帮助和使用情况消息并发出错误。

getopt.getopt方法

此方法用于解析命令行选项和参数列表。

句法:

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

args-这是一个需要解析的参数列表。

options-脚本要识别的字符串选项字母,带有需要一个参数的选项,后跟一个冒号(:)。

long_options(可选)-必须是带有long选项名称的字符串,应该支持它。

  • 此方法返回一个由两个元素组成的值,即( option,value )对列表,剥离选项列表后剩下的程序参数列表。
  • 每个选项和值对作为选项的第一个元素返回,对于短选项(例如,’-x’)以连字符开头,对于长选项(例如’–long-option’)以两个连字符开头。

异常getopt.GetoptError

当在参数列表中找到无法识别的选项时,或者没有给任何需要参数的选项时,就会出现此异常。

异常的参数是指示错误原因的字符串。属性msg和opt给出错误消息和相关选项。

#!/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  -o '
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print 'test.py -i  -o '
         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:])

输出:

$ test.py -h
usage: test.py -i  -o 

$ test.py -i BMP -o
usage: test.py -i  -o 

$ test.py -i inputfile
Input file is " inputfile
Output file is "

如何在Python使用命令行参数?