作者归档:Daniel Sun

Python在linux中输出带颜色的文字

参数说明如下

前景色            背景色             颜色
------------------------------------------
 30                40               黑色
 31                41               红色
 32                42               绿色
 33                43               黃色
 34                44               蓝色
 35                45               紫红色
 36                46               青蓝色
 37                47               白色
显示方式           意义
------------------------------
 0                终端默认设置
 1                高亮显示
 4                使用下划线
 5                闪烁
 7                反白显示
 8                不可见

例子

  1. 这将输出蓝色底,黄色字,带下划线的闪烁文字
    print "\033[1;5;33;44;4mHello, world\033[0m"
  2. 这将输出绿色的Login successful
    print "\033[1;32m%s\033[0m" % "Login successful"
  3. 这将输出红色的Wrong password
    print "\033[1;31m%s\033[0m" % "Wrong password"

Openwrt路由器使用Python自动登录北航校园网

环境配置

关于在Openwrt上安装Python可以参考这里

https://wiki.openwrt.org/doc/software/python

使用本程序请先安装Python

代码内容

在~目录下写buaa.py,内容如下

import urllib
import urllib2
import hashlib
import os
 
 
#Here input your username and password
username = 'xxx'
password = 'xxx'


def check_network():
	response = urllib2.urlopen('http://www.offer4u.cn/ping', timeout=3)
	response.close()
	return response.getcode() == 204

def login(username,password):
	md5 = hashlib.md5()
	md5.update(password)
	password = md5.hexdigest()[8:-8];
	url = 'http://gw.buaa.edu.cn/cgi-bin/do_login'
	values = {'username':username,'password':password,'drop':'0','type':'1','n':'100'}
	data = urllib.urlencode(values)
	req = urllib2.Request(url, data)
	response = urllib2.urlopen(req, timeout=3)
	page_result= response.read()
	response.close()
	if page_result.isdigit() == True:
		return "\033[1;32m%s\033[0m" % "Login successful"
	elif page_result == "password_error":
		return "\033[1;31m%s\033[0m" % "Wrong password"
	else:
		return "\033[1;31m%s\033[0m" % "Unknown error" + page_result

def light(on):
	if on == 1:
		os.system('echo 1 > /sys/class/leds/y1\:blue\:internet/brightness')
	else:
		os.system('echo 0 > /sys/class/leds/y1\:blue\:internet/brightness')
#main
try:
	if check_network() == False:
		light(0)
		result = login(username,password)
		if "successful" in result:
			light(1)
		else:
			light(0)
		print result
	else:
		light(1)
		print "\033[1;34m%s\033[0m" % "Network connection is working"
except:
	light(0)
	print "\033[1;31m%s\033[0m" % "Processing error"

代码解析

  1. 该程序运行时,首先检测网络是否连通(check_network函数),如果网络不连通则进行(login函数),然后根据登录结果输出提示或错误,并控制路由器上的一个灯来表示网络是否连通
  2. 其中http://www.offer4u.cn/ping,这个网址将在网络正常情况下返回204HTTPCODE,这个工作方式和google的类似,本来可以用google.cn的但是由于北航内部有IPV6所以会导致该网址一直处于连通状态,所以用了国内的版本。
  3. 下面这部分是一个shell脚本,用来控制我用的路由器,联想Y1上面的Internet灯的开关,网络连通时让该灯亮起(echo 1),不连通则关闭(echo 0)该灯
    echo 0 > /sys/class/leds/y1\:blue\:internet/brightness

    如果你是其他的路由器,请打开/sys/class/leds/ 目录,找到你想控制的灯,修改y1\:blue\:internet 即可(这里的反斜杠是转义符)
    QQ截图20160304003544
    这款路由器推荐一下非常不错,支持U盘并且内存和运存等配置足够支持运行和安装很多软件,并且价格便宜,我买的时候才70多

  4. 我们可以在编写完后执行python -m py_compile buaa.py ,把py编译成pyc提升性能

持续运行

  1. 在使用的过程中可能会断网,甚至比如北航会在凌晨4点准时断网,所以我们需要启用crontab来持续运行该脚本
    crontab -e

    然后我们输入

    */1 * * * * python ~/buaa.pyc > /dev/null
    */1 * * * * sleep 20; python ~/buaa.pyc > /dev/null
    */1 * * * * sleep 40; python ~/buaa.pyc > /dev/null

    这样就会每隔20秒运行我们的脚本,如果网络断开就会自动连通,其中> /dev/null 是用来关闭输出
    其中Openwrt不会默认启动crontab,我们还需要执行一下命令

    /etc/init.d/cron start
    /etc/init.d/cron enable
  2. 我们可以在连接之后手动登录北航http://gw.buaa.edu.cn/index.php,来查看是否登录成功和用户及流量状况

Openwrt安装完整版vim,支持代码变色和缩进

Openwrt默认的是vi而不是vim,如果想使用必须安装vim-full,同时要安装vim-runtime

opkg update
opkg install vim-full vim-runtime

我们输入vim就可以看见安装成功

QQ截图20160303225938

然后执行下面的命令编辑vim配置

vim /usr/share/vim/vimrc

同时分享一下我的配置

set showcmd         " show (partial) command in status line
set showmatch       " show matching brackets
set incsearch       " incremental search
set autowrite       " automatically save before commands like :next and :make
set nocompatible    " use vim defaults instead of 100% vi compatibility
set backspace=indent,eol,start  " more powerful backspacing
set autoindent      " always set autoindenting on
set linebreak       " don't wrap words by default
set textwidth=0     " don't wrap lines by default
set ruler           " show the cursor position all the time

set backupskip+=/etc/crontabs.* " fix crontab -e

"set number       "设置行号
syntax on         "语法高亮
filetype on       "文件类型检测
set tabstop=4
set softtabstop=4
set shiftwidth=4

 

Nginx开启Gzip

操作方法

打开nginx,conf,在http { 内添加如下内容

gzip  on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
gzip_vary on;

参数讲解

gzip

决定是否开启gzip模块
Param: on|off
Example: gzip on; 

gzip_buffers

设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
Param1: int
Param2: int(k) 后面单位是k
Example: gzip_buffers 4 8k;

gzip_comp_level

设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
Param: 1-9
Example: gzip_com_level 1; 

gzip_min_length

当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩
Param: int
Example: gzip_min_length 1000; 

gzip_http_version

用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略
Param: 1.0|1.1
Example: gzip_http_version 1.0 

gzip_proxied

Nginx做为反向代理的时候启用,

gzip_types

设置需要压缩的MIME类型,非设置值不进行压缩