乐趣区

关于物联网:物联网基础入门实战可落地的-AIoT-项目

download: 物联网根底入门,实战可落地的 AIoT 我的项目

有时候咱们会有这样的一个需要:
咱们定义了一个 Python 的方法,方法接收一些参数,然而调用的时候想将这些参数用命令行暴露出来。
比方说这里有个爬取方法:
import requests

def scrape(url, timeout=10):

response = requests.get(url, timeout=timeout)
print(response.text)
复制代码
这里定义了一个 scrape 方法,第一个参数接收 url,即爬取的网址,第二个参数接收 timeout,即指定超时工夫。
调用的时候咱们可能这么调用:
scrape(‘https:///www.baidu.com’, 10)
复制代码
如果咱们想改参数换 url,那就得改代码对吧。
所以有时候咱们就想把这些参数用命令行暴露出来,这时分咱们可能就用上了 argparse 等等的库,挨个申明各个参数是干嘛的,非常繁琐,代码如下:
parser = argparse.ArgumentParser(description=’Scrape Function’)
parser.add_argument(‘url’, type=str,

            help='an integer for the accumulator')

parser.add_argument(‘timeout’, type=int,

            help='sum the integers (default: find the max)')

if name == ‘__main__’:

args = parser.parse_args()
scrape(args.url, args.timeout)
复制代码
这样咱们才能顺利地使用命令行来调用这个脚本:
python3 main.py https://www.baidu.com 10
复制代码
是不是感觉非常麻烦?argparse 写起来又臭又长,想想就费劲。
Fire
但接下来咱们要介绍一个库,用它咱们只需要两行代码就可能做到如上操作。
这个库的名字叫做 Fire,它可能疾速为某个 Python 方法或者类增加命令行的参数反对。
先看看安装方法,使用 pip3 安装即可:
pip3 install fire
复制代码
这样咱们就安装好了。
使用
上面咱们来看几个例子。
方法反对
第一个代码示例如下:
import fire

def hello(name=”World”):
return “Hello %s!” % name

if name == ‘__main__’:
fire.Fire(hello)
复制代码
这里咱们定义了一个 hello 方法,而后接收一个 name 参数,默认值是 World,接着输入了 Hello 加 name 这个字符串。
而后接着咱们导入了 fire 这个库,调用它的 Fire 方法并传入 hello 这个方法申明,会发生什么事件呢?
咱们把这段代码保存为 demo1.py,接着用 Python3 来运行一下:
python3 demo1.py
复制代码
运行后果如下:
Hello World!
复制代码
看起来并没有什么不同。
但咱们这时分如果运行如下命令,就可能看到一些神奇的事件了:
python3 demo1.py –help

复制代码
运行后果如下:
NAME

demo1.py
SYNOPSIS

demo1.py
FLAGS

–name=NAME

Default: 'World'

复制代码
可能看到,这里它将 name 这个参数转化成了命令行的一个可选参数,咱们可能通过 —-name 来替换 name 参数。
咱们来试下:
python3 demo1.py –name 123
复制代码
这里咱们传入了一个 name 参数是 123,这时分咱们就发现运行后果就变成了如下内容:
Hello 123!
复制代码
是不是非常便利?咱们没有借助 argparse 就轻松实现了命令行参数的反对和替换。
那如果咱们将 name 这个参数的默认值勾销呢?代码改写如下:
import fire

def hello(name):
return “Hello %s!” % name

if name == ‘__main__’:
fire.Fire(hello)
复制代码
这时分从新运行:
python3 demo1.py –help
复制代码
就可能看到后果变成了如下内容:
NAME

demo1.py
SYNOPSIS

demo1.py NAME
POSITIONAL ARGUMENTS

NAME
NOTES

You can also use flags syntax for POSITIONAL ARGUMENTS
复制代码
这时分咱们发现 name 这个参数就变成了必传参数,咱们必须在命令行里指定这个参数内容,调用就会变成如下命令:
python3 demo1.py 123
复制代码
运行后果还是一样的。

退出移动版