在Python程序中,通常从命令行传入参数并在程序中进行处理时,我们使用sys.argv
来获取命令行参数。但是这种方式有一个缺点就是难以自动进行解析和提示。Python标准库中的argparse
模块提供了一种自动解析命令行参数和生成帮助信息的方式,使我们的命令行工具代码更加易读、易维护和可扩展。下面是Github仓库添加标签的命令行工具中使用了argparse
模块的示例代码:
import argparse
parser = argparse.ArgumentParser(description="Add labels to Github Issues and Pull Requests")
parser.add_argument("-r", "--repo", required=True, help="Github Repository (owner/repo)")
parser.add_argument("-t", "--token", required=True, help="Github Access Token")
parser.add_argument("-i", "--issue", required=True, help="Github Issue or Pull Request Number")
parser.add_argument("-l", "--labels", required=True, help="Comma separated list of labels to be added")
args = parser.parse_args()
print(f"Repository: {args.repo}")
print(f"Access Token: {args.token}")
print(f"Issue/PR Number: {args.issue}")
print(f"Labels to be added: {args.labels}")
以上代码中,argparse.ArgumentParser()
方法用于创建解析器parser
对象。description
参数用于描述脚本的功能,会显示在帮助信息中。add_argument()
方法用于添加命令行参数。其中-r
和--repo
表示参数名的简写和全写形式,required=True
表示该参数为必需参数,help
参数用于描述该参数的作用。其他参数说明如下:
-t, --token
: Github API的access token-i, --issue
: Github Issue或Pull Request的号码-l, --labels
:要添加的标签的逗号分隔列表
最后,通过parser.parse_args()
来解析命令行参数。执行该脚本时,可以通过以下方式传递参数:
python add_labels.py -r octocat/hello-world -t [ACCESS_TOKEN] -i 1234 -l bug,enhancement
另外一个示例是,假设有一个脚本用于将文件递归地拷贝到目标目录下:
import argparse
import os
import shutil
def copy_directory(source_dir, dest_dir):
"""
递归地拷贝目录
"""
os.makedirs(dest_dir, exist_ok=True) # 创建目标目录
for item in os.listdir(source_dir):
source_path = os.path.join(source_dir, item)
dest_path = os.path.join(dest_dir, item)
if os.path.isdir(source_path):
copy_directory(source_path, dest_path)
else:
shutil.copy2(source_path, dest_dir)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Recursively copy a directory to a destination directory")
parser.add_argument('source', help="Source directory to copy from")
parser.add_argument('destination', help="Destination directory to copy to")
args = parser.parse_args()
source_dir = args.source
dest_dir = args.destination
copy_directory(source_dir, dest_dir)
在以上代码中,这个脚本需要传递两个参数:源目录source
和目标目录destination
。调用argparse.ArgumentParser()
方法时,不用为这两个参数指定任何简写、全写形式或help参数,因为它们就是脚本的位置参数。通过args.source
和args.destination
来从解析器对象中获取参数值。执行该脚本时,可以通过以下命令传递参数:
python copy_dir.py /path/to/source /path/to/dest
以上就是argparse
模块的基本用法,可以根据不同的需求来添加更多的参数选项。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 命令行参数模块argparse的实现 - Python技术站