有时候我们会有这样的需求:我们定义了一个Python方法,接收一些参数,但是我们想在调用的时候使用命令行暴露这些参数。例如这里有一个抓取方法:importrequestsdefscrape(url,timeout=10):response=requests.get(url,timeout=timeout)print(response.text)复制代码这里定义了一个抓取方法,第一个参数接收url,为抓取的URL,第二个参数接收timeout,指定超时时间。调用的时候,我们可能会这样调用:scrape('https:///www.baidu.com',10)copycode如果我们要改参数,改url,那我们就得改代码对不对?所以有时候我们想使用命令行来暴露这些参数。这时候我们可能会使用argparse等库来一一声明每个参数是干什么的。这很麻烦。代码如下:parser=argparse.ArgumentParser(description='ScrapeFunction')parser.add_argument('url',type=str,help='anintegerfortheaccumulator')parser.add_argument('timeout',type=int,help='sumtheintegers(default:findthemax)')ifname=='__main__':args=parser.parse_args()scrape(args.url,args.timeout)复制代码以便我们可以使用顺利调用这个脚本的命令行:python3main.pyhttps://www.baidu.com10是不是觉得复制代码很麻烦?argparse写起来又臭又长,想想也是费了一番功夫。开火了,但是接下来我们将介绍一个库,我们可以用它只用两行代码就可以完成上述操作。这个库的名称是Fire,它可以快速地为Python方法或类添加命令行参数支持。先来看看安装方法,直接使用pip3安装即可:pip3installfire复制代码,这样我们就可以安装了。让我们看一些使用以下内容的示例。方法支持第一个代码示例如下:importfiredefhello(name="World"):return"Hello%s!"%nameifname=='__main__':fire.Fire(hello)复制代码这里我们定义了一个hello方法,然后接收一个name参数,默认值为World,然后输出字符串Hello加上name。然后我们导入fire库,调用它的Fire方法并传入hello方法语句,会发生什么?我们把这段代码保存为demo1.py,然后用Python3运行:python3demo1.py复制代码运行结果如下:HelloWorld!复制代码看起来没有什么不同。但是如果我们此时运行下面的命令,就可以看到一些神奇的东西:python3demo1.py--help复制代码运行结果如下:NAMEdemo1.pySYNOPSISdemo1.py
