当你编写一个Python脚本时,它通常需要一些参数来提供上下文信息。例如,你可能需要指定文件路径,设置日志级别或指定输出格式。命令行参数是一种流行的方式来提供这些信息,但如果手工分析参数,则可能会变得非常棘手。因此,Python提供了Argparse模块来帮助我们通过解析命令行参数更加容易地获得所需信息。
Argparse简介
Argparse模块是Python标准库中提供的一种用于解析命令行参数和选项的工具。 Argparse从sys.argv中解析出命令行参数并返回一个对象,该对象包含参数值和选项值。例如,如果你运行以下命令:
python my_script.py --input input_file.txt --output output_file.txt -v
在my_script.py中可以通过Argparse获取以下信息:
- input_file.txt是输入文件名。
- output_file.txt是输出文件名。
- 等级的verbose级别设置为True。
这里是一个Argparse的示例,解析之后可以得到输入和输出文件的路径以及是否启用更高的日志级别输出:
import argparse
parser = argparse.ArgumentParser(description='Description of your program')
parser.add_argument('--input', '-i', dest='input_file', help='Input file path', required=True)
parser.add_argument('--output', '-o', dest='output_file', help='Output file path', required=True)
parser.add_argument('--verbose', '-v', dest='verbose', help='Verbose logging', action='store_true')
args = parser.parse_args()
# access arguments
print(args.input_file)
print(args.output_file)
print(args.verbose)
在这个示例中,我们导入了Argparse模块并创建了一个argparse.ArgumentParser对象。使用add_argument方法,我们定义了三个参数,分别是input_file、output_file、verbose。这个方法的第一个参数是参数名(可以看做是一个变量名),用于获取命令行输入所带的参数值。--input和--output表示长参数名,-i和-o表示短参数名,dest参数表示将该参数解析后保存到哪个变量中。help参数提供的是该参数对应的帮助提示信息,required参数表示是否为必须参数。在这个例子中,--input和--output都是必须的。verbose参数是一个标签,如果在命令行中出现-v,则会将verbose参数解析为True。
最后我们调用了parser.parse_args()方法来解析参数,我们可以使用args.input_file,args.output_file和args.verbose等属性获取所需参数的值。
Argparse示例
下面给出两个Argparse的示例:
示例1
这个示例是将两个数字相加。
import argparse
parser = argparse.ArgumentParser(description='Description of your program')
parser.add_argument('--first', dest='first', help='First number', required=True)
parser.add_argument('--second', dest='second', help='Second number', required=True)
args = parser.parse_args()
first = int(args.first)
second = int(args.second)
print(first + second)
在这个示例中我们使用add_argument添加了两个参数first和second,分别表示相加的两个数,并且使用了help属性以提高代码可读性。参数first和second均为必填参数。
接下来我们使用parser.parse_args()方法来解析参数,所需的两个参数都可以通过args.first和args.second获取。我们将这两个参数转换成整数后,返回他们的和。
示例2
这个示例演示了如何在Python脚本中使用Argparse实现命令行工具的转换。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("infile", type=str, help="input file name")
parser.add_argument("-o", "--outfile", type=str, required=True, help="output file name")
parser.add_argument("-u", "--uppercase", help="convert text to uppercase", action="store_true")
parser.add_argument("-l", "--lowercase", help="convert text to lowercase", action="store_true")
args = parser.parse_args()
def convert_text(infile, outfile, uppercase, lowercase):
with open(infile, 'r') as fin:
text = fin.read()
if uppercase:
text = text.upper()
elif lowercase:
text = text.lower()
with open(outfile, 'w') as fout:
fout.write(text)
convert_text(args.infile, args.outfile, args.uppercase, args.lowercase)
这个脚本可以将文本文件转换为大写或小写,输入文件和输出文件均需要指定。
我们使用argparse.ArgumentParser()方法创建一个新的解析器对象,并添加了infile、outfile、uppercase和lowercase四个参数。其中infile和outfile均必填(无需指定参数名),uppercase和lowercase均为可选参数。
对于可选参数,使用action属性指定处理方式,这里的处理方式为如果参数在命令行中可见,则将参数解析为True,否则解析为False。例如,使用了-u或--uppercase参数,则uppercase参数会被视为True。在convert_text方法中根据uppercase或lowercase参数将text转换成大写或小写,然后将其写入到输出文件中。
最后,我们使用parser.parse_args()方法获取到所有命令行参数的值,并将其传递给convert_text方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python命令行解析工具Argparse - Python技术站