软硬件环境

  • windows 10 64bit
  • anaconada3 with python 3.7.1
  • fabric 2.4.0
  • wordcloud 1.5.0

fabric

fabric是一个通过SSH来远程执行shell命令的第三方库,对于项目部署及运维人员非常有用,它同时支持python2python3fabric的实现基于InvokeparamikoInvoke实现了命令行的高级接口;而paramiko则实现了SSH协议。

fabric的安装

利用pip安装fabric,安装的同时,会生成命令行工具fab,这个工具我们后面会用到

pip install fabric

fabric的基本使用

先来个fabric中的Hello world.,新建文件名为fabfile.py的源码文件,内容如下

# -*- coding: utf-8 -*-


"""
@author: Xu Gaoxiang
@license: Apache V2
@email: xugx.ai@gmail.com
@site: https://www.xugaoxiang.com
@software: PyCharm
@file: fabfile.py
@time: 3/19/2019 2:05 PM
"""

from fabric import task

@task()
def hello(ctx):
    """
    这里的ctx代表的是上下文
    """
    print("Hello Fabric!")

然后在命令行中执行

fab hello

可以在终端看到Hello Fabric!的输出字样。解释下,fabfile.py文件中每个函数就是一个任务,任务名即函数名,如上例中的hellofab命令就是用来执行fabfile.py中定义的任务的,它必须显式地指定任务名。你可以使用参数-l来列出当前fabfile.py文件中定义的所有任务。

fab默认读取fabfile.py中的任务,当然你也可以不使用fabfile.py这个文件,只是需要在执行的时候加上-f $文件名

给任务传参

from fabric import task

@task
def hi(ctx, name, value):
    """
    这里的ctx代表的是上下文, 后面的name和value是需要传递的参数
    """
    print("Hello Fabric! {}={}".format(name, value))

用如下命令执行

fab hi "Year" "2019"

执行结果

Hello Fabric! Year=2019

执行远程命令

from fabric import task
from fabric import Connection

@task
def uname(r):
    """
    ssh到192.168.1.133,然后执行命令uname -a
    """
    c = Connection('192.168.1.133', user='longjing', port=22, connect_kwargs={'password': 'd'})
    c.run('uname -a')

执行结果如下

C:\xugaoxiang\gogs\blog\Python\Modules>fab uname
Linux FR 4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

wordcloud

wordcloud是一个构建词云的工具包,在一些数据展示或者PPT中使用,会给人耳目一新的感觉。

安装

pip install wordcloud

示例

# -*- coding: utf-8 -*-


"""
@author: Xu Gaoxiang
@license: Apache V2
@email: xugx.ai@gmail.com
@site: https://www.xugaoxiang.com
@software: PyCharm
@file: test.py
@time: 3/19/2019 4:41 PM
"""

import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud

# 需要显示的文本
text = "wordclould"

x, y = np.ogrid[:300, :300]

mask = (x - 150) ** 2 + (y - 150) ** 2 > 130 ** 2
mask = 255 * mask.astype(int)


wc = WordCloud(background_color="white", repeat=True, mask=mask)
wc.generate(text)

plt.axis("off")
plt.imshow(wc, interpolation="bilinear")
plt.show()

生成的词云是这样的

translated

wordclould还提供了命令行工具wordcloud_cli,如wordcloud_cli --text mytext.txt --imagefile wordcloud.png可以直接根据文本生成词云图,更多定制的高级功能请参考官方文档。

参考资料


Comments

comments powered by Disqus