如何在Python中添加命令行参数?
简介…
Python 有一个非常强大的 argparse 模块,它提供用于解析命令行参数的函数。如果我们想从操作系统命令行获取用户输入而无需大量交互,或者编写一个从命令行接受参数的程序(例如,提供要解析的 URL 或接受要上传到 S3 存储桶的文件),那么可以使用 argparse,并且只需付出最小的努力。
基本用法
定义你的代码将要接受的参数。
调用参数解析器以返回结果对象。
使用参数。
简而言之,参数解析器的结构如下所示。
def main( parameters): << Logic here >> if __name__ == '__main__': << 1. Define argument parser >> << 2. Parse the arguements >> << 3. Validation >> << 4. call main (parameters) >>
主函数知道我们代码的入口点是什么。`__name__ == '__main__'` 部分仅在直接调用代码时执行。
创建一个程序,该程序只接受一个参数 - 网球运动员姓名(字符串)。
import argparse
def get_args():
""" Function : get_args
parameters used in .add_argument
1. metavar - Provide a hint to the user about the data type.
- By default, all arguments are strings.
2. type - The actual Python data type
- (note the lack of quotes around str)
3. help - A brief description of the parameter for the usage
"""
parser = argparse.ArgumentParser(
description='Example for Two positional arguments',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
# Adding our first argument player name of type string
parser.add_argument('player',
metavar='player',
type=str,
help='Tennis Player')
return parser.parse_args()
# define main
def main(player):
print(f" *** The {player} had won 20 grandslam titles.")
if __name__ == '__main__':
args = get_args()
main(args.player)a) 现在,当你在不传递任何参数的情况下从命令行执行此程序时,即如果什么也没有给出,它将打印关于正确调用程序方法的简短使用说明。
In [3]: run <>.ipynb usage: ipython [-h] player ipython: error: the following arguments are required: player An exception has occurred, use %tb to see the full traceback.
b) 如果我们提供多个参数,它会再次报错。程序会抱怨收到一个未定义的第二个参数。
c) 只有当我们向程序提供 exactly 一个参数时,它才会运行。
2. 创建一个程序,该程序只接受两个参数 - 网球运动员姓名(字符串)和该运动员获得的大满贯冠军数量(整数)。
示例
import argparse
def get_args():
""" Function : get_args
parameters used in .add_argument
1. metavar - Provide a hint to the user about the data type.
- By default, all arguments are strings.
2. type - The actual Python data type
- (note the lack of quotes around str)
3. help - A brief description of the parameter for the usage
"""
parser = argparse.ArgumentParser(
description='Example for Two positional arguments',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
# Adding our first argument player name of type string
parser.add_argument('player',
metavar='player',
type=str,
help='Tennis Player')
# Adding our second argument player titles of type integer/number.
parser.add_argument('titles',
metavar='titles',
type=int,
help='Tennis Player Grandslam Titles')
return parser.parse_args()
# define main
def main(player, titles):
print(f" *** The {player} had won {titles} grandslam titles.")
if __name__ == '__main__':
args = get_args()
main(args.player, args.titles)
现在打开你的终端并执行程序。如果没有传递参数,脚本将返回带有清晰消息的错误。
输出
<<< python test.py usage: test.py [-h] player titles test.py: error: the following arguments are required: player, titles <<< python test.py federer 20 *** The federer had won 20 grandslam titles.
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP