本文概述
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顶部模块
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.optopt方法
此方法用于解析命令行选项和参数列表。
句法:
getopt.getopt(args, options, [long_options])
args-这是一个需要解析的参数列表。
options-脚本要识别的一串选项字母, 带有需要一个参数的选项, 后跟一个冒号(:)。
long_options(可选)-必须是带有long选项名称的字符串, 应该支持它。
- 此方法返回一个由两个元素组成的值, 即(选项, 值)对列表, 剥离选项列表后剩下的程序参数列表。
- 每个选项和值对作为选项的第一个元素作为返回值返回, 对于短选项(例如, ‘-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 <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:])
输出
$ test.py -h
usage: test.py -i <inputfile> -o <outputfile>
$ test.py -i BMP -o
usage: test.py -i <inputfile> -o <outputfile>
$ test.py -i inputfile
Input file is " inputfile
Output file is "
如何在python中使用命令行参数?
Module | Use | Python version |
---|---|---|
sys | sys.argv中的所有参数(基本) | All |
argparse | 建立命令行界面 | >= 2.3 |
docopt | 创建的命令行界面 | >= 2.5 |
fire | 自动生成命令行界面(CLI) | All |
optparse | Deprecated | < 2.7 |
Docopt
Docopt用于创建命令行界面。
from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__, version='Example 1')
print(arguments)
火
Python Fire自动生成命令行界面;你只需要一行代码。与其他模块不同, 它可以立即工作。
你不需要定义任何参数。默认情况下, 所有方法都是链接的。
要安装它, 请输入:
pip install fire
定义或使用一个类:
import fire
class Python(object):
def hello(self):
print("Hello")
def openfile(self, filename):
print("Open file '" + filename + "'")
if __name__ == '__main__':
fire.Fire(Python)
你具有与类方法匹配的选项:
python example.py hello
python example.py openfile filename.txt
评论前必须登录!
注册