最近使用命令行运行python脚本的时候,需要输入参数,而python如何接收运用这些参数的。网上查了一下有比较多的库可以实现,argparse、docopt、click 和 fire等。
这里使用的是argparse库,argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数。它的使用也比较简单,自动创建
一、我的测试脚本:
def main():
# description参数可以用于描述脚本的参数作用,默认为空
parser = argparse.ArgumentParser(description="监控数据库中新增的物流单号或者未签收的物流单,定时同步物流信息到本地数据库中.")
parser.add_argument('--crawl_type', '-c', type=int, choices=[1, 2], default=1, help='1:更新物流信息; 2:抓取物流新单')
parser.add_argument('--logistics_providers', '-l', default=None, help='指定爬取物流商名称,用括号和双引号括起来,比如:("DHL","UPS")')
parser.add_argument('--sleep_time', '-s', default=100, type=int, help='设置当无爬取任务后,休眠等待的时间(秒).')
parser.add_argument('--process_num', '-p', choices=[1, 3, 5, 7], default=5, type=int, help='设置多进程爬取,默认是5个进程.')
args = parser.parse_args() # 获取命令行参数
start(
crawl_type=args.crawl_type,
logistics_providers=args.logistics_providers,
sleep_time=args.sleep_time,
process_num=args.process_num,
) # 开始爬取任务
if __name__ == '__main__':
main()
二、命令行运行脚本
- 查看帮助说明:可以看到这个脚本的功能说明,以及各个参数的说明
python track_crawl.py --help
三、分析代码
1、ArgumentParser()
创建一个解释器parser
,description 是关于这个程序的功能说明。
parser = argparse.ArgumentParser(description="监控数据库中新增的物流单号或者未签收的物流单,定时同步物流信息到本地数据库中.")
2、add_argument()
add_argument方法常用的有以下参数:
- 参数名称: 第一个是参数名称,比如我这里参数名称是crawl_type,前面加“--”;
- 参数别名: 参数简写,比如这里c代表这个参数的简写,前面加“-”;
- type: 指定输入的参数类型,输入的参数将被指定方法调用,可以这些方法包含int、str、tuple、list等;
- choices:指定用户输入的参数选择,用户不能输入指定参数以为的值;
- default:如果用户不指定参数,则默认参数为该值;
- help:该参数的说明。
parser.add_argument('--crawl_type', '-c', type=int, choices=[1, 2], default=1, help='1:更新物流信息; 2:抓取物流新单')
3、parser.parse_args()
获取命令行参数
args = parser.parse_args() # 获取命令行所有的参数
crawl_type=args.crawl_type # 获取crawl_type参数
题外话
好了,上面已经说明了关于Python的argparse库是如何解析命令行参数的,我们正常使用python脚本的时候,都是需要先打开命令行工具,切换到路径,然后输入命令指定运行脚本,为了避免重复操作,我们可以使用写个BAT批处理。
- 创建bat文件
创建一个文本文件,命名为“定时更新物流信息任务.bat”,内容如下
:: 注释说明:执行定时更新物流信息任务的脚本,休眠时间设置为4个钟
python track_crawl.py -c 1 -s 14400
- 运行bat文件
直接双击刚刚创建的bat批处理文件即可。可以看到直接弹出命令行工具,并且自动运行刚刚我们创建的代码。
- 后台运行bat脚本
如果需要,可以看这篇文章:后台运行bat脚本