Python getopt
解析命令行参数是一项非常常见的任务,python getopt模块是解析python命令行参数的选项之一。
Python getopt
Python的getopt模块与C的getopt()函数用于解析命令行参数非常相似。
由于此函数类似于C函数和Unix getopt()函数,因此熟悉这些约定的用户会发现使用Python getopt模块函数非常容易。
如果要使用更简单的模块来解析命令行参数,请尝试argparse。
Python getopt函数
" getopt"是模块提供的第一个同名功能。
它解析命令行选项和参数列表。
该功能的签名如下所述:
getopt.getopt(args, shortopts, longopts=[])
其参数包括:
args是要传递的参数。
shortopts是该脚本接受的选项。
可选参数longopts是此函数接受的String参数的列表,应支持此参数。
注意,"-"不应在选项名称前加上。
让我们使用一些示例来研究此功能。
Python 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)
在此示例中,我们仅接受了一些参数。
在运行脚本之前,让我们对这里发生的事情建立理解:
在sys.argv [1:** 中,我们使用起始索引为1,因为sys.argv [0]是正在运行的脚本的名称,无需在脚本中访问。
现在,getopt函数接受三个参数:
从sys.argv [1:** 中获得的命令行参数列表,一个包含脚本可接受的所有接受的单字符命令行选项的字符串,以及一个等效于单字符版本。如果
getopt
调用发生任何错误,我们还可以捕获Exception并对其进行优雅处理。
其中我们只是退出了脚本执行。与任何操作系统中的任何其他命令一样,明智的做法是在用户错误地运行脚本时打印详细信息。
那么," hm:d"是什么意思?看这里:
-h print help and usage message -m: accept custom option value -d run the script in debug mode
第一个和最后一个选项是默认选项。
我们使用自定义选项作为m:
,注意冒号吗?冒号表示此选项可以获取任何类型的值。
最后,单字符版本与较长版本相同," h"与" help"相同。
您可以提及任何一个。
现在运行脚本:
因此,这将选项和参数收集在单独的列表中。
关于getopt
的最好的部分是它允许我们优雅地管理任何可能的异常:
关于my_file =
标志,有一点要注意。
必须始终向my_file =
标志提供一个附加参数,就像-m
标志一样。
这由" my_file ="中的等号描述。
用于GNU样式解析的Python gnu_output()
在Python 2.3中,在getopt模块中添加了另一个函数,称为gnu_output()。
该函数与原始的getopt()
函数非常相似,不同之处在于默认情况下使用GNU样式扫描。
我们来看一个有关如何使用此功能的脚本示例:
import getopt import sys variant = '1.0' debug = False output_file = 'my_file.out' print('ARGV :', sys.argv[1:]) options, remainder = getopt.gnu_getopt( sys.argv[1:], 'o:v', ['output=', 'debug', 'variant=',]) print('OPTIONS :', options) for opt, arg in options: if opt in ('-o', '--output'): print('Setting --output.') output_file = arg elif opt in ('-d', '--debug'): print('Setting --debug.') debug = True elif opt == '--variant': print('Setting --variant.') variant = arg print('VARIANT :', variant) print('DEBUG :', debug) print('OUTPUT :', output_file) print('REMAINING :', remainder)
在建立理解之前,让我们运行以下脚本:
我们甚至可以尝试运行不带任何参数的脚本:
这描述了不传递任何参数时分配给值的默认值。
如果您想要更大的灵活性,请不要忘记尝试argparse模块。