ssh别名登录

2013年12月31日 17:11

经常使用ssh远程登录,每次都敲一长串字符。重复多了,有砸键盘的冲动。后来发现可用别名代替。

在~/.ssh/config 中加入以下内容

Host mt98   //快捷名
HostName 135.32.9.98 //主机名
User monitor  //用户名

然后可用ssh mt98登陆

运行时出现错误

ssh: Could not resolve hostname mt98: Name or service not known

config文件需要改成和known_hosts的所有者一致.

Tags: ssh
评论(0) 阅读(1033)

错误默认值造成的郁闷

2013年12月30日 10:37

使用错误的默认值,会掩盖错误,又造成新的错误,最后将错误传入内部。

# 前台传入三个参数,三个参数都是必需的.
identifier = web.input().get("identifier", None)   # webpy框架
year = web.input().get("year", None)
taxpayer_name = web.input().get("taxpayer_name", None)
# 传输如None参数,会导致接口出现错误
result = service.inquiryTaxOwe(identifier, year, taxpayer_name)

前台传入三个参数时,表现正常。

上面使用默认参数是demo阶段时为了方面。实现时会出现下面的情况.

如果人来用它,只传入部分参数,结果发现程序有异常(inquirytaxOwe函数内抛出的)。它会找到实现接口的人,告诉你你的程序有问题。这个时候你怎么解释? 异常是里面一层抛出的,这一层可不管调用者的事,调用者只负责传参数,然后拿到结果。这时你会发现多么的郁闷。说不是你的责任,但是有你一分。说不是调用者的责任,实际也有它一分。
 
换一种方式
identifier = web.input().identifier
year = web.input().year
taxpayer_name = web.input().taxpayer_name
result = service.inquirytaxOwe(identifier, year, taxpayer_name)

再不传入参数时,会及早发现,不会再有上面的郁闷了.

评论(0) 阅读(774)

SimpleHttpServer出现unicodeDecodeError

2013年12月30日 09:46

在win8系统下运行 python -m SimpleHTTPServer 出现Traceback (most recent call last):

  File "D:\Python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "D:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "D:\Python27\lib\SimpleHTTPServer.py", line 27, in <module>
    class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  File "D:\Python27\lib\SimpleHTTPServer.py", line 208, in SimpleHTTPRequestHand
ler
    mimetypes.init() # try to read system mime.types
  File "D:\Python27\lib\mimetypes.py", line 358, in init
    db.read_windows_registry()
  File "D:\Python27\lib\mimetypes.py", line 258, in read_windows_registry
    for subkeyname in enum_types(hkcr):
  File "D:\Python27\lib\mimetypes.py", line 249, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal
not in range(128)

在import SimpleHTTPServer时,同样出现上面的错误.

在import sys后面加上下面语句

reload(sys)
sys.setdefaultencoding('gbk')

评论(0) 阅读(1438)

Building the main Guest Additions module [失败]

2013年12月27日 19:03

在安装virtualbox的增强功能时出现错误
Building the main Guest Additions module [失败]
 
查看日志找到原因,缺少依赖
Uninstalling modules from DKMS
Attempting to install using DKMS

Creating symlink /var/lib/dkms/vboxguest/4.3.6/source ->
                 /usr/src/vboxguest-4.3.6

DKMS: add completed.
Error! echo
Your kernel headers for kernel 3.12.5-302.fc20.x86_64 cannot be found at
/lib/modules/3.12.5-302.fc20.x86_64/build or /lib/modules/3.12.5-302.fc20.x86_64/source.
Failed to install using DKMS, attempting to install without
/tmp/vbox.0/Makefile.include.header:97: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again。 停止。
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
 
安装缺少的模块
sudo yum install dkms kernel-devel
应该是在编译一些东西,可能需要先安装gcc
 
验证是否成功
sudo /etc/init.d/vboxadd setup

 

Tags: virtualbox
评论(0) 阅读(1419)

令人不爽的数据检查

2013年12月17日 22:01

每当看到,用if检查数据,正确则把参数参入xxx函数执行,总是很不爽.

不仅感觉难看,而且使逻辑混乱.

数据合法性判断是函数自身的职责,如果将这个职责移到外面,它就是一个污染.

使用这个函数的地方越多污染的也越多.

 

评论(0) 阅读(794)

让远程机器执行命令的便捷方式

2013年12月17日 21:19

假如想查看远程机器A上的某个进程是否存在.

通常第一步是ssh到那台机器,第二步是运行ps -ef |grep process_mon.py命.

ssh可以将两个步骤合并在一起,让过程更轻松.

ssh wyq@135.32.22.22 'ps -ef |grep process_mon.py'

评论(0) 阅读(798)

with让数据库操作代码变得清爽

2013年12月17日 21:03

对数据操通常都需要打开与关闭连接,而且用try-finally保证连接被关闭.

这些常规的操作会让代码变得难看.

db = web.database(dbn='oracle', db='......', user='hy', pw='1234')
try:
    db.query("select * from t_c_ms_interface")
finally:
    db.ctx.db.close()

用上下文协议隐藏这些操作

class IPCCCDB:
    def __init__(self):
        self.dns = '....'

    def __enter__(self):
        import web
        self.db = web.database(dbn='oracle', db=self.dns, user='hy', pw='1234')
        return self.db

    def __exit__(self, type, value, traceback):
        self.db.ctx.db.close()

然后,变得如此清爽

with IPCCCDB() as db:
    db.query("select * from t_c_ms_interface")

评论(0) 阅读(994)

python排列*号

2013年12月10日 11:24

输出以下内容

*
***
*****
*******
*********
***********
     *
    ***
   *****
  *******
 *********
***********   
 
借用str的format可以方便的实现,但只有python2.6以上才支持
f = '{:<11}'
print '\n'.join([f.format('*' * i) for i in range(1, 12, 2)])
f = '{:^11}'
print '\n'.join([f.format('*' * i) for i in range(1, 12, 2)])
 

Tags: 字符串
评论(0) 阅读(933)

weblogic.Admin出现No available router to desctination错误

2013年11月21日 14:32

最近写一小段代码在aix 5.3系统中获取webloigc服务的状态。

执行的命令是

java weblogic.Admin -username weblogic -password weblogic123456 GETSTATE

出现的结果是

Failed to connect to t3://127.0.0.1:7001: Destination unreachable; nested exception is: 
        java.net.ConnectException: A remote host refused an attempted connect operation.; No available router to destination

很明显,它找不到路由。

试过以下几点:

1. 可以确定weblogic已经启动了,并且运行正常。

2.ping 127.0.0.1和ping localhost均正常

3. 通过指定下面url参数,也无用

java weblogic.Admin -url t3://127.0.0.1:7001 -username weblogic -password weblogic123456 GETSTATE
java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic123456 GETSTATE
java weblogic.Admin -url t3://0.0.0.0:7001 -username weblogic -password weblogic123456 GETSTATE

最后在url参数中将地址设置为此机器对外的ip地址,命令才运行成功。

java weblogic.Admin -url t3://135.32.21.21:7001 -username weblogic -password weblogic123456 GETSTATEjava weblogic.Admin -url t3://135.32.21.21:7001 -username weblogic -password weblogic123456 GETSTATE

输出结果为:Current state of "AdminServer" : RUNNING

很奇怪localhost与127.0.0.1竟然无效,反而使用对外的ip才有效果。

评论(0) 阅读(2482)

用python检测文件是否正在被修改

2013年11月17日 23:07

使用lsof filename 可以查询到文件正在被谁使用。下面是python实现的检测代码。

a.py检测代码

#encoding=utf-8
import os


def isOpen(filename):
    # 执行lsof命令
    p = os.popen("lsof %s" % filename)
    # lsof找到打开的文件时有输出
    content = p.read()
    p.close()
    # 通过是否有输出,判断文件是否打开
    return bool(len(content))

if __name__ == '__main__':
    print isOpen("a.log")

b.py模拟正在修改文件

#encoding=utf-8
import time

if __name__ == '__main__':
    f = open("a.log", 'a')
    while True:
        time.sleep(5)

注意只能检测到文件被谁打开的情况。在python中就是open()了一个文件,并且还没有close()掉的情况。

以下情况是检测不到的:

vim xxx

python xxx

上面是比较简陋的一种方式,更强大的功能请见pyinotify模块

评论(1) 阅读(2515)