Python中的命令行参数
在操作系统的命令行 shell 中,在程序名称之后给出的参数称为命令行参数。 Python提供了处理这些类型参数的各种方法。最常见的三种是:
- 使用 sys.argv
- 使用 getopt 模块
- 使用 argparse 模块
使用 sys.argv
sys 模块提供了用于操作Python运行时环境的不同部分的函数和变量。该模块提供对解释器使用或维护的一些变量以及与解释器进行强交互的函数的访问。
一个这样的变量是 sys.argv,它是一个简单的列表结构。它的主要目的是:
- 它是一个命令行参数列表。
- len(sys.argv) 提供命令行参数的数量。
- sys.argv[0] 是当前Python脚本的名称。
示例:假设有一个用于将两个数字相加的Python脚本,并且这些数字作为命令行参数传递。
Python3
# Python program to demonstrate
# command line arguments
import sys
# total arguments
n = len(sys.argv)
print("Total arguments passed:", n)
# Arguments passed
print("\nName of Python script:", sys.argv[0])
print("\nArguments passed:", end = " ")
for i in range(1, n):
print(sys.argv[i], end = " ")
# Addition of numbers
Sum = 0
# Using argparse module
for i in range(1, n):
Sum += int(sys.argv[i])
print("\n\nResult:", Sum)
Python3
# Python program to demonstrate
# command line arguments
import getopt, sys
# Remove 1st argument from the
# list of command line arguments
argumentList = sys.argv[1:]
# Options
options = "hmo:"
# Long options
long_options = ["Help", "My_file", "Output="]
try:
# Parsing argument
arguments, values = getopt.getopt(argumentList, options, long_options)
# checking each argument
for currentArgument, currentValue in arguments:
if currentArgument in ("-h", "--Help"):
print ("Displaying Help")
elif currentArgument in ("-m", "--My_file"):
print ("Displaying file_name:", sys.argv[0])
elif currentArgument in ("-o", "--Output"):
print (("Enabling special output mode (% s)") % (currentValue))
except getopt.error as err:
# output error, and return with an error code
print (str(err))
Python3
# Python program to demonstrate
# command line arguments
import argparse
# Initialize parser
parser = argparse.ArgumentParser()
parser.parse_args()
Python3
# Python program to demonstrate
# command line arguments
import argparse
msg = "Adding description"
# Initialize parser
parser = argparse.ArgumentParser(description = msg)
parser.parse_args()
Python3
# Python program to demonstrate
# command line arguments
import argparse
# Initialize parser
parser = argparse.ArgumentParser()
# Adding optional argument
parser.add_argument("-o", "--Output", help = "Show Output")
# Read arguments from command line
args = parser.parse_args()
if args.Output:
print("Displaying Output as: % s" % args.Output)
输出:
使用 getopt 模块
Python getopt 模块类似于 C 的 getopt()函数。与 sys 模块不同,getopt 模块通过参数验证扩展了输入字符串的分离。它允许包括价值分配在内的短期和长期期权。但是,该模块需要使用 sys 模块来正确处理输入数据。要使用 getopt 模块,需要从命令行参数列表中删除第一个元素。
Syntax: getopt.getopt(args, options, [long_options])
Parameters:
args: List of arguments to be passed.
options: String of option letters that the script want to recognize. Options that require an argument should be followed by a colon (:).
long_options: List of string with the name of long options. Options that require arguments should be followed by an equal sign (=).
Return Type: Returns value consisting of two elements: the first is a list of (option, value) pairs. The second is the list of program arguments left after the option list was stripped.
例子:
Python3
# Python program to demonstrate
# command line arguments
import getopt, sys
# Remove 1st argument from the
# list of command line arguments
argumentList = sys.argv[1:]
# Options
options = "hmo:"
# Long options
long_options = ["Help", "My_file", "Output="]
try:
# Parsing argument
arguments, values = getopt.getopt(argumentList, options, long_options)
# checking each argument
for currentArgument, currentValue in arguments:
if currentArgument in ("-h", "--Help"):
print ("Displaying Help")
elif currentArgument in ("-m", "--My_file"):
print ("Displaying file_name:", sys.argv[0])
elif currentArgument in ("-o", "--Output"):
print (("Enabling special output mode (% s)") % (currentValue))
except getopt.error as err:
# output error, and return with an error code
print (str(err))
输出:
使用 argparse 模块
使用 argparse 模块是比上述两个选项更好的选择,因为它提供了很多选项,例如位置参数、参数的默认值、帮助消息、指定参数的数据类型等。
注意:作为默认的可选参数,它包括 -h 及其长版本 -help。
示例 1: argparse 模块的基本使用。
Python3
# Python program to demonstrate
# command line arguments
import argparse
# Initialize parser
parser = argparse.ArgumentParser()
parser.parse_args()
输出:
示例 2:在帮助消息中添加描述。
Python3
# Python program to demonstrate
# command line arguments
import argparse
msg = "Adding description"
# Initialize parser
parser = argparse.ArgumentParser(description = msg)
parser.parse_args()
输出:
示例 3:定义可选值
Python3
# Python program to demonstrate
# command line arguments
import argparse
# Initialize parser
parser = argparse.ArgumentParser()
# Adding optional argument
parser.add_argument("-o", "--Output", help = "Show Output")
# Read arguments from command line
args = parser.parse_args()
if args.Output:
print("Displaying Output as: % s" % args.Output)
输出: