Python 命令行参数

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

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

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

What is argument passing?

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

为什么要使用 argparse?

它意味着程序的作者和用户之间的通信,这不需要进入代码并对脚本进行更改。它为用户提供了输入命令行参数的能力。

访问命令行参数

Python sys模块通过 sys.argv 提供对命令行参数的访问。

Python sys模块

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

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

它将命令行参数存储到一个列表中;我们可以使用 sys.argv 访问它。这是非常有用的,也是以字符串形式读取命令行参数的简单方法。


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 module-python 剖析模组

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

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

getopt.getopt 方法

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

语法:


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

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

options -脚本想要识别的一串选项字母,其中的选项需要一个参数,参数后面应该跟一个冒号(😃。

long_options(可选) -必须是包含长选项名称的字符串,应该支持。

  • 该方法返回一个由两个元素组成的值,即(选项列表,值)对,选项列表被剥离后留下的程序参数列表。

  • 每个选项和值对作为选项的第一个元素返回,短选项以连字符为前缀(例如,'-x ‘),长选项以两个连字符为前缀(例如,’- long-option ')。

Exception getopt.GetoptError

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

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

代码


#!/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 中如何使用命令行参数?

组件使用Python 版本
syssys.argv 中的所有参数(基本)all
argparse构建命令行界面>= 2.3
docopt已创建命令行界面>= 2.5
fire自动生成命令行界面(CLi)all
optparseDeprecated< 2.7

docopt

Docopt 用于创建命令行界面。


from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__, version='Example 1')
print(arguments)

Fire

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

原文:https://www.javatpoint.com/python-command-line-arguments