你也可以手敲一个高速下载器(八)命令行参数
你也可以手敲一个高速下载器(八)命令行参数
前言
到目前为止我们这样程序如果想要修改下载的url
和文件保存的路径
只能手动的去修改脚本代码,这样一点都不像一个程序,即便只是个终端程序,所以我们这里就为我们的程序添加一个启动参数
选择一个库
在python中命令行库有很多种,如:argparse
、docopt
、click
和 fire
,都各有各的特点,有点特别灵活,有的特别简洁,我们这里选择的是fire
的这个库,他的用法很简单,同时也很强大:
Github:github.com/google/pyth…
基本使用
使用方法大家可以看看上面👆,写的很清楚了,简单来说分几种启动方式:
- fire.Fire()的方法,不指定肯定参数,这个方法会自动查询所有可运行的函数作为命令
- fire.Fire(add)的方法,此方法是指定一个函数,会自动识别改函数的参数作为可选型或必选项
- fire.Fire({ 'add': add, 'mul': multiply})的方法,这里是传入了一个字典,通过字典来查询需要运行的命令
- fire.Fire(Runing)的方法,这里传入的是一个类,类的初始化参数会作为全局参数,类的成员方法会作为程序的各个命令
在我们目前的程序当中,不需要太复杂,选择只运行单个方法即可。
需要定义的参数
以目前的情况我们只需要定义参数:
- 将要下载的:
url
- 保存的路径:
save_path
- 保存的名字:
save_name
async def main(
url: str,
save_path: str = None,
save_name: str = None
):
"""
高速下载普通文件
:param url: 下载地址
:param save_path: 保存的文件夹,默认为./downloads文件夹
:param save_name: 保存至的文件名, 默认从url中获取
:return:
"""
download = HSDownloader(
url,
save_path=save_path,
save_name=save_name
)
await download.start()
if __name__ == '__main__':
fire.Fire(main)
这里把程序的启动方法修改了一下,把之前的__main__
里面asyncio.run(main())
异步运行main
方法修改成了由Fire
来运行我们的程序,但也不需要担心,Fire
会自动失败函数是异步还是同步然后选择不同的方式去运行。然后我们在main
函数里面加了一个位置参数,两个可选参数,并且都设置了参数类型和注释,这些做在运行程序的时候就会自动识别,下面是效果:
正常指定参数只需要这样就好了:
pdm run python hs_dl/main.py https://xxx.exe
加参数的:
pdm run python hs_dl/main.py https://xxx.exe --save_path=./a/b --save_name=v.exe
本地运行
由于我们使用了命令行的方式运行程序,那么直接从IDE里面运行肯定就运行不了,那么我们一定要在代码里面写测试代码吗?肯定不至于用这么不优雅的方法,如果大家使用的Pycharm
的方法运行的程序,可以这样用:
代码仓库:
本节的代码以上传至 Github,请自行下载及观看:第八节代码
结语
本节内容并不多,但使它更像一个程序了,有输入,有输出了,让我们继续不断的完善它,下节敬请期待!!!
转载自:https://juejin.cn/post/7134729893970968589