关于python:两行代码给-Python-脚本生成命令行

47次阅读

共计 1882 个字符,预计需要花费 5 分钟才能阅读完成。

有时候咱们会有这样的一个需要:
咱们定义了一个 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>

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
复制代码
运行后果还是一样的。

正文完
 0