Pingcheck – 用Ping检查网络通断并即时通知

Felix Yan | 2010-09-06 | 334 views

使用方法:

python pingcheck.py < 目标>

比如

python pingcheck.py 8.8.8.8

简单的小脚本…跨平台…分别用了pynotify和pywin32库来执行通知, 因此需要安装相应的库才可以使用.
用ping检查网络通断,并且在通断情况改变时提示用户…

截图:

下载地址:
脚本(任意平台): http://movieinfofetch.googlecode.com/files/pingcheck.py
Windows下的已编译版本(需要VC2005运行库): http://movieinfofetch.googlecode.com/files/pingcheck.exe
Read the rest of this entry »

Ubuntu 多网环境自动路由表(区别教育网内外) + 分享到多张网卡网络的实现

Felix Yan | 2010-08-13 | 587 views

首先, 感谢 @BOYPT @jimmy_xu_wrk @tjmao @yegle 等朋友的帮忙!

1, 多网环境, Felix 的环境是 VPN over cernet2 + cernet 双网.

2, 自动路由表, 采用 www.nic.edu.cn 的官方 Free IP 数据.
以下是 Felix 用 Python 写的一个小小的自动生成脚本:

import re
import urllib
a=urllib.urlopen('http://www.nic.edu.cn/RS/ipstat/internalip/real.html').read()
b=re.compile("([\d\.]+)\s+[\d\.]+\s+([\d\.]+)")
c=b.findall(a)
m=["#!/bin/bash","OLDGW=$1","NEWGW=$2","route del -net 0.0.0.0 netmask 0.0.0.0","route add -net 0.0.0.0 netmask 0.0.0.0 gw $NEWGW"]
n=["#!/bin/bash"]
for d in c:
    m.append("route add -net "+d[0]+" netmask "+d[1]+" gw $OLDGW")
    n.append("route del -net "+d[0]+" netmask "+d[1])
e=open('gtwcernet',"w")
e.write("\n".join(m))
e.close()
f=open('gtwcernetd',"w")
f.write("\n".join(n))
f.close()

会在当前目录生成 gtwcernet 和 gtwcernetd 两个文件
然后给他们加上执行权限

chmod +x gtwcernet
chmod +x gtwcernetd

前一个是启用自动路由表
Usage: gtwcernet <教育网网关> <VPN/电信网网关>
后一个是禁用自动路由表
Usage: gtwcernetd
Read the rest of this entry »

两个算分数(比例)的小程序 [Python]

Felix Yan | 2010-07-17 | 262 views

随手写的小程序 很小很实用, 尤其是在压片的时候计算sar值等方面.
第一个: 化简分数

样例输入1: 16/12
样例输出1: 4 : 3
样例输入2: 16*480/(9*704)
样例输出2: 40 : 33

恩, 简单说来, 就是化任意分数为最简分数

第二个: 小数化分数
给一个范围,用范围内的数组成分数,并使这个分数的值最接近所给的小数(如样例给的是1-100和1-1000的范围)

样例输入1: 3.1415926535897 100
样例输出1: 22 : 7
样例输入2: 3.1415926535897 1000
样例输出2: 355 : 113

Read the rest of this entry »

一个简单的srt字幕多行转单行的脚本[Python]

Felix Yan | 2010-07-16 | 325 views

基本功能: 双语字幕中英文分离, 各自成一行
避免srtedit在合并某些字幕后中英文各占不止一行, 导致最终生成的字幕占4行的尴尬情况.

基本示例:
源文件:

1
00:01:06,107 --> 00:01:07,483
This is a test
这是一个测试
 
2
00:01:12,906 --> 00:01:16,450
测试!
快测试呀
 
3
00:01:18,703 --> 00:01:19,953
测试好了没有?
我问你好了没有?
Is the test OK?
What's the result?

处理后:

1
00:01:06,107 --> 00:01:07,483
这是一个测试
This is a test
 
2
00:01:12,906 --> 00:01:16,450
测试! 快测试呀
 
3
00:01:18,703 --> 00:01:19,953
测试好了没有? 我问你好了没有?
Is the test OK? What's the result?

基本功能完好,细节有些小毛病…
Read the rest of this entry »

Freessh.us的自动连接脚本(Python)

Felix Yan | 2010-07-06 | 593 views

虽然我有付费的SSH Tunnel服务用,不过昨天围观到freessh.us改成了每15分钟换一次密码,新密码在其首页上发布,还是猥琐了一把,写了个简单的自动链接脚本:

import urllib,re,os
while True:
    a=urllib.urlopen('http://www.freessh.us').read()
    a=a.replace('\n','').replace('\r','')
    b=re.compile('\>(\w{1,3}\.freessh\.us)\<\/td\>.+?(\w{4,7})\<\/td\>.+?\>(\w{3,7})\<\/td')
    for i in b.findall(a):
        os.system('plink '+i[0]+' -N -ssh -2 -P 22 -l '+i[1]+' -C -D 7070 -v -pw \"'+i[2]+'\"')

不想围观脚本可以用力点这里下载.
Linux/Windows都可以使用,其他系统没试过.
Linux使用要安装plink:

# apt-get install putty-tools
# yum install putty-tools

Windows使用要安装Python 2.6+并把plink.exe放到同一目录. plink的下载方式参见我的另一篇文章:Plink+Polipo 轻松打造IE可用的SSH Tunnel(Win)

另外BOYPT神牛的博客提供了一种expect+shell脚本的方式达到近似的效果,传送门: http://apt-blog.net/across-the-great-wall-we-can-reach-every-corner-in-the-world

Python / wxPython 学习笔记 – Day 2 多线程 / 文本编码

Felix Yan | 2010-05-14 | 581 views

转到Ubuntu学习已经很长时间,另外在VirtualBox虚拟机中安装了WinXP,以检测跨平台的问题。
关于多线程,我想实现的功能具体是:子线程运算,更新主线程进度条; 子线程调用外部进程获取返回值,更新主线程进度条

文本编码问题

我的第一个wxpython程序的第一个版本中,我为了在windows系统下正确显示中文,大量采用了

.encode('gbk')

的输出方式,然而这种方式在默认编码为UTF-8的Linux系统下无法正常显示。
so how to solve it?
下面是我的解决方法:
1, 在win下安装wxpython的unicode版本,直接传unicode字符串给wxpython相关方法,即可显示中文
2, 调用外部命令等必须严格按照系统编码的时候,可以采用下面的编码方式(当然,先import sys):

.encode(sys.getfilesystemencoding())

这样即可达到相当好的跨平台兼容性:)
Read the rest of this entry »

解决依赖关系,让Debian/Ubuntu下的boa-constructor使用wxgtk2.8

Felix Yan | 2010-04-08 | 391 views

Debian/Ubuntu下的boa-constructor有对python-wxgtk2.6的依赖关系,即使安装了python-wxgtk2.8,boa-constructor仍然只调用2.6版本。Felix通过以下的步骤解决了这个问题(以Ubuntu为例):

1, 首先找到boa-constructor的安装文件,默认位置在 /var/cache/apt/archives/boa-constructor_0.6.1-9ubuntu1_all.deb
使用下面的命令将文件复制到当前目录:

cp /var/cache/apt/archives/boa-constructor_0.6.1-9ubuntu1_all.deb .

2, 建立文件夹boanew, 为解压deb文件做准备

mkdir boanew

3, 解压boa-constructor的deb控制文件:

dpkg-deb -e ./boa-constructor_0.6.1-9ubuntu1_all.deb ./boanew/DEBIAN

4, 解压程序文件:

dpkg-deb -x ./boa-constructor_0.6.1-9ubuntu1_all.deb ./boanew

Read the rest of this entry »

Python, wxPython / Boa Constructor 学习笔记 – Day 1

Felix Yan | 2010-03-28 | 1,276 views

在GTK+, QT 和 wxWidgets 之间犹豫了挺长时间, 最后还是选择了wxWidgets(其实我只是看中了”native”控件)

现在我的软件环境是:

Windows 7 x86_64
Python 2.6.5
wxPython 2.8.10.1
Boa Constructor 0.6.1

一开始见到这IDE, 我仿佛又看到了Delphi…
点击上面板上 New => wx.App 就可以创建新的wxPython 应用程序了
(一开始我直接点了wx.Frame, 结果还花了点力气才让窗口能显示出来…)

然后新建 wxFrame, 在wx.Frame界面的时候, Editor 窗口的工具栏上会出现传说中的 Frame Designer. 就是他了!

关于Sizer:

对于以前从未用过Sizer及其类似物(VB6用数行代码实现类似功能), 起初使用Sizer我是相当的不适应.
大致摸索几次之后, 慢慢找到了规律 比如从上而下是如下结构的窗体:
工具栏
结果文本框
状态栏
这是窗口的底层结构,所以用wx.BoxSizer实现上下排列(其中工具栏需要用子Sizer)

然后把wx.FlexGridSizer填到刚建立的boxSizer1里, 主体构架就完了:)
接下来就和我熟悉的VB6一样, 一个个拖需要的控件到窗体上…

选中特定控件后,可以在左侧Inspector里打开Evts, 在左侧列表里选择事件类别, 然后双击右侧具体需要的事件. 在退出Designer的时候, 相应的Bind和函数会自动建好.

!!注意:不要在Sizer里留不存在的控件或者None控件, 否则退出Designer时会收到一条警告,并且在无更改的情况下, 程序是不能运行的.

Sizer窗口里点击相应控件, 和在窗体上直接点击, 出现在左侧Inspector里的属性是不一样的. 初次使用Sizer看到控件密密麻麻挤在一起很不爽, 可以给相应控件加上一定的Border, 并且在Flags里把wx.ALL设为True.

Flag -> wx.EXPAND设为True的时候, 会根据Sizer类型”占领”相应方向的全部空间. 比如使用BoxSizer的时候给文本框勾上wx.EXPAND, 则文本框左右范围会覆盖整个窗体. 如果希望上下也覆盖整个窗体, 可以加大Proportion属性的设置.
Read the rest of this entry »

QR Code Business Card