Python 如何访问命令行参数
命令行是给操作系统提供可执行命令的地方。通过在命令行中在python可执行文件前面写入脚本名称,可以执行Python脚本。
C:\users\acer>python test.py
如果你想要将一些数据元素传递给Python脚本进行处理,这些元素被写作以脚本名称作为接续的空格分隔值。这个以空格分隔的值列表被称为命令行参数。
例如,
C:\users\acer>python test.py Hello TutorialsPoint
当存在通过命令行传递参数的方式时,也必须存在一种接受通过命令行传递的参数的方式。有多种方法可以访问它们。
- 使用List对象argv[]
-
使用argparse模块
-
使用getopt模块
使用argv[] List对象
Python包含一个特殊的列表对象argv[],用于存储通过命令行传递的参数。它们由空格字符分隔。argv[]在Python分发的sys模块中定义。
示例
例如,假设我们正在尝试将两个字符串作为参数传递给Python文件’test.py’,并通过命令行执行它。
C:\users\acer>python test.py Hello TutorialsPoint
此程序的List对象将包含以下内容−
sys.argv[]=[‘test.py’, ‘Hello’, ‘TutorialsPoint’]
test.py:
在Python程序中,按照以下方式访问这些参数 –
import sys
print ("first command line argument: ",sys.argv[1])
print ("second command line argument: ",sys.argv[2])
输出
输出结果如下:
first command line argument: Hello
second command line argument: Tutorialspoint
使用argparse模块
argparse模块是一个内置模块,它可以减少样板代码,使您的代码更加健壮。它优于使用特殊的列表对象argv[],因为argparse模块处理所有标准用例,包括子命令,并为您生成帮助和用法。它还检查和清理用户的输入,而argv[]不能做到。
示例
在下面的示例中,让我们尝试通过命令行执行以下Python程序’test.py’。
import argparse
parser = argparse.ArgumentParser("simple_example")
parser.add_argument('student_id', type=str, help='Show student_id')
args = parser.parse_args()
print("The Student Exists with ID:")
print(args.student_id)
在命令行中,使用以下命令来执行上面的程序,
输出
python test.py 2000133
输出将以以下方式产生 –
The Student Exists with ID:
2000133
使用 getopt 模块
Python 提供了 getopt 模块用于解析程序中的命令行参数。该 API 的设计类似于 C 编程语言中的 getopt() 函数,因此它支持与该函数相同的约定。
该模块提供了一个同名的方法, getopt() ,用于访问命令行参数。以下是该方法的语法−
getopt.getopt(args, shortopts, longopts=[])
如我们所见,getopt() 方法接受三个参数:args、shortopts 和 longopts。
其中,
- args 是命令行参数的列表
-
shortopts 是短选项的列表
-
longopts 是一个包含长选项名称的字符串列表。需要附加参数的选项应该在等号(=)后面。
该方法等同于 sys.args[1:],即它不访问程序的引用。
示例
以下示例演示了使用 getopt.getopt() 方法解析命令行参数的用法。
import sys
import getopt
def welcome():
first_arg = None
next_arg = None
argv = sys.argv [1:]
try:
opts , args = getopt.getopt (argv, "f:n:")
except:
print ("Error")
for opt , arg in opts:
if opt in ['-f']:
first_arg = arg
elif opt in ['-n']:
next_arg = arg
print (first_arg + " " + next_arg)
welcome()
输出
使用以下命令通过命令行传递两个参数来执行上述程序:
python test.py -f Hello -n Tutorialspoint!
输出结果如下:
Hello Tutorialspoint!