的教程
⽆论你在linux上娱乐还是⼯作,这对你⽽⾔都是⼀个使⽤python来编程的很好的机会。回到⼤学我希望他们教我的是Python⽽不是Java,这学起来很有趣且在实际的应⽤如yum包管理器中很有⽤。
本篇教程中我会带你使⽤python和⼀个称为flask的微型框架来构建⼀个简单的应⽤,来显⽰诸如每个进程的内存使⽤,CPU百分⽐之类有⽤的信息。前置需求
Python基础、列表、类、函数、模块。HTML/CSS (基础)。
在⼤多数Linux发⾏版上Python是默认安装的。下⾯的你命令可以让你看到安装的版本。
[root@linux-vps ~]# python -VPython 2.7.5
我们会使⽤3.x的版本来构建我们的app。根据Python.org所说,现在只对这个版本进⾏改进,⽽且不向后兼容Python 2。注意: 在开始之前,我强烈建议你在虚拟机中尝试这个教程,因为Python是许多Linux发⾏版的核⼼组件,任何意外都可能会损坏你的系统。
以下步骤是基于红帽的版本如CentOS(6和7),基于Debian的版本如UbuntuMint和Resbian可以跳过这步,Pythonn 3应该默认已经安装了。如果没有安装,请⽤apt-get⽽不是yum来安装下⾯相应的包。
[leo@linux-vps] yum groupinstall 'Development Tools'
[leo@linux-vps] yum install -y zlib-dev openssl-devel sqlite-devel bzip2-devel[leo@linux-vps] wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz[leo@linux-vps] tar -xvzf Python-3.4.2.tgz[leo@linux-vps] cd Python-3.4.2[leo@linux-vps] ./configure[leo@linux-vps] make
# 推荐使⽤ make altinstall 以覆盖当前的 python 库[leo@linux-vps] make altinstall
成功安装后,你应该可以⽤下⾯的命令进⼊Python3.4的shell了。
[leo@linux-vps]# python3.4
Python 3.4.2 (default, Dec 12 2014, 08:01:15)[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type \"help\>>> exit ()
使⽤pip来安装包
Python有它⾃⼰的包管理去,与yum和apt-get相似。你将需要它来下载、安装和卸载包。
[leo@linux-vps] pip3.4 install \"packagename\"[leo@linux-vps] pip3.4 list
[leo@linux-vps] pip3.4 uninstall \"packagename\"
Python虚拟环境
在Python中虚拟环境是⼀个放置你的项⽬的依赖环境的⽬录。这是⼀个将带有不同的依赖环境的项⽬隔离的好办法。它可以让你不⽤sudo命令就能安装包。
[leo@linux-vps] mkdir python3.4-flask[leo@linux-vps] cd python3.4-flask
[leo@linux-vps python3.4-flask] pyvenv-3.4 venv
要创建虚拟环境你需要使⽤“pyvenv-3.4”命令。上述命令会在venv⽂件夹的内部创建⼀个名为lib的⽬录,这⾥会安装项⽬所依赖的包。这⾥同样会创建⼀个bin⽂件夹容纳该环境下的pip和python可执⾏⽂件。为我们的Linux系统信息项⽬激活虚拟环境
[leo@linux-vps python3.4-flask] source venv/bin/activate[leo@linux-vps python3.4-flask] which pip3.4~/python3.4-flask/venv/bin/pip3.4
[leo@linux-vps python3.4-flask] which python3.4~/python3.4-flask/venv/bin/python3.4
使⽤pip安装flask
让我们继续安装第⼀个模块flask框架,它可以处理访问路由和渲染显⽰我们app的模板。
[leo@linux-vps python3.4-flask]pip3.4 install flask
在flask中创建第⼀个应⽤第⼀步:创建你app的⽬录
[leo@linux-vps python3.4-flask] mkdir app
[leo@linux-vps python3.4-flask] mkdir app/static[leo@linux-vps python3.4-flask] mkdir app/templates
在python3.4-flask⽂件夹中创建⼀个名为app的⽂件夹,它包含了两个⼦⽂件夹“static”和“templates”。我们的Python脚本会放在app⽂件夹,像css/js这类⽂件会在static⽂件夹,template⽂件夹会包含我们的html模板。第⼆步:在app⽂件夹内部创建⼀个初始化⽂件
[leo@linux-vps python3.4-flask] vim app/_init_.pyfrom flask import Flask
app = Flask(__name__)from app import index
这个⽂件会创建⼀个Flask的新的实例,并加载我们存储在index.py⽂件中的python程序——这个⽂件我们之后会创建。
[leo@linux-vps python3.4-flask]vim app/index.pyfrom app import app
@app.route('/')def index():
import subprocess
cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)out,error = cmd.communicate()memory = out.splitlines()
return
flask中的访问路由通过“路由装饰器”处理。它⽤于将⼀个 URL 绑定到函数。
@app.route('/')
@app.route('/index')
要在python中运⾏shell命令,你可以使⽤Subprocess模块中的Popen类。
subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
这个类会使⽤⼀个列表作为参数,列表的第⼀项默认是可执⾏的程序,下⼀项会是参数,这⾥是个另外⼀个例⼦。
subprocess.Popen(['ls', ‘-l'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
stdout和stderr会相应地存储命令的输出和错误。你可以使⽤Popen的communicate⽅法来访问输出。
out,error = cmd.communicate()
要更好地⽤html模板显⽰输出,我会使⽤splitlines()⽅法,
memory = out.splitlines()
关于subprocess模块更多的信息会在教程的最后给出。第三步:创建⼀个html模板来显⽰我们命令的输出。要做到这个我们使⽤flask中的Jinja2模板引擎来为我们渲染。最后你的index.py⽂件应该看起来像这样:
from flask import render_templatefrom app import app
def index():
import subprocess
cmd = subprocess.Popen(['ps_mem'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)out,error = cmd.communicate()memory = out.splitlines()
return render_template('index.html', memory=memory)
现在在你的模板⽬录下创建⼀个index.html模板,flask会⾃动搜索这个⽬录下的模板。
[leo@linux-vps python3.4-flask]vim app/templates/index.html
Memory usage per process
{% for line in memory %}{{ line.decode('utf-8') }}
{% endfor %}
Jinja2模板引擎允许你使⽤“{{ … }}”分隔符来输出结果,{% … %}来做循环和赋值。我使⽤“decode()”⽅法来格式化。第四步:运⾏app
[leo@linux-vps python3.4-flask]vim run.pyfrom app import appapp.debug = True
app.run(host='174.140.165.231', port=80)
上⾯的代码会在debug模式下运⾏app。如果你不指定 IP 地址和端⼝,默认则是localhost:5000。
[leo@linux-vps python3.4-flask] chmod +x run.py[leo@linux-vps python3.4-flask] python3.4 run.py
我已经加了更多的代码来显⽰CPU、I/O和平均负载。
你可以在这⾥浏览完整的代码。
这是⼀个对flask的简短教程,我建议你阅读下⾯的教程和⽂档来更深⼊地了解。
因篇幅问题不能全部显示,请点此查看更多更全内容