likes
comments
collection
share

你也可以手敲一个高速下载器(八)命令行参数

作者站长头像
站长
· 阅读数 53

你也可以手敲一个高速下载器(八)命令行参数

前言

到目前为止我们这样程序如果想要修改下载的url文件保存的路径只能手动的去修改脚本代码,这样一点都不像一个程序,即便只是个终端程序,所以我们这里就为我们的程序添加一个启动参数

选择一个库

在python中命令行库有很多种,如:argparsedocoptclick 和 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
评论
请登录