📜  在Python的终端上执行具有多个参数的函数

📅  最后修改于: 2022-05-13 01:55:20.372000             🧑  作者: Mango

在Python的终端上执行具有多个参数的函数

命令行参数是用户在运行时提供的参数,由程序中的函数或方法执行。 Python提供了多种方法来处理这些类型的参数。最常见的三种是:

  • 使用 sys.argv
  • 使用 getopt 模块/li>
  • 使用 argparse 模块

Python sys 模块允许在 sys 模块的帮助下访问命令行参数。 Python sys 模块提供了可用于访问Python运行时环境的不同部分的函数和变量。它允许访问系统特定的参数和功能。要使用 sys 模块,我们需要在程序中导入 sys 模块,然后再运行任何函数。
sys模块主要有两个功能:
sys.argv :给出命令行参数列表。例如,sys.argv[0] 是程序名称。
len(sys.argv) :给出命令行参数的数量。

示例 1:该程序演示了使用 sys.argv 来获取命令行参数,并且 len(sys.argv) 给出了传递的命令行参数的总数,包括Python脚本的名称。

# importing the module
import sys
  
# storing the arguments
program = sys.argv[0]
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
  
# displaying the program name
print("Program name : " + program)
  
# displaying the arguments
print("arg1 : " + arg1)
print("arg2 : " + arg2)
print("arg3 : " + arg3)
print("Number of arguments : ", len(sys.argv))
print(sys.argv)

输出 :

示例 2:该程序演示了如何使用 sys.argv[index] 将命令行参数传递给函数。索引 1、2 和 3 处的命令行参数存储在变量 arg1、arg2 和 arg3 中。变量 arg1、arg2 和 arg3 被传递给定义的函数。但是,可以直接传递命令行参数,而无需将其值存储在局部变量中。

# importing the module
import sys
  
# function definition
def concat(s1, s2, s3):
    print(s1 + " " + s2 + " " + s3)
  
# fetching the arguments
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
  
# calling the function
concat(arg1, arg2, arg3)

输出 :

示例 3:该程序演示了如何使用 sys.argv[index] 将命令行参数传递给函数。索引 1 和 2 处的命令行参数存储在变量 arg1 和 arg2 中。变量 a 和 b 被传递给定义的函数。命令行参数被接受为字符串,因此为了执行数字运算,应该首先将其转换为所需的数字类型。例如,在这个程序中,命令行参数首先转换为整数,然后存储到变量中。但是,可以直接传递命令行参数,而无需将其值存储在局部变量中。

# importing the module
import sys
  
# function definition
def add(a, b):
    print("Result", a + b)
  
# fetching the arguments
arg1 = int(sys.argv[1])
arg2 = int(sys.argv[2])
  
# displaying the arguments
print(arg1, arg2)
  
# calling the function
add(arg1, arg2)

输出 :

使用 argparse 模块
sys.argv 方法存在一定的问题,因为如果未传递参数或传递了无效类型的参数,它不会引发任何特定错误。 argparse 模块优雅地处理参数的缺失和存在。以下示例显示了 argparse 模块的实用程序:

# importing the module
import argparse
  
# creating an ArgumentParsert object
parser = argparse.ArgumentParser()
  
# fetching the arguments
parser.add_argument('number',
                    help = "Enter number to triple it.")
args = parser.parse_args()
  
# performing some operation
print(args.number * 2)

输出 :

默认情况下, Python接受所有命令行参数作为字符串类型,因此结果是 55 即。字符串重复两次。但是,我们可以在程序本身中指定我们期望的数据类型,这样每当传递命令行参数时,只要它是类型兼容的,它就会自动转换为期望的数据类型。

# importing the module
import argparse
  
# creating an ArgumentParsert object
parser = argparse.ArgumentParser()
  
# fetching the arguments
parser.add_argument('number',
                    help = "Enter number to double.",
                    type = int)
args = parser.parse_args()
print(args.number * 2)

输出 :

我们可以查看生成的错误:

与 sys 模块不同,此 argparse 会引发特定错误。任何模块都可以根据方便和要求使用。

Python提供了一个 getopt 模块,可以解析命令行参数。

例子 :

import sys 
import getopt 
    
    
def full_name(): 
    first_name = None
    last_name = None
    
    argv = sys.argv[1:] 
    
    try: 
        opts, args = getopt.getopt(argv, "f:l:") 
        
    except: 
        print("Error") 
    
    for opt, arg in opts: 
        if opt in ['-f']: 
            first_name = arg 
        elif opt in ['-l']: 
            last_name = arg 
        
    
    print( first_name +" " + last_name) 
    
full_name()

输出 :