Sublime text 3配置python运行环境

1. 在菜单栏依次点击:Tools->Build System->New Build System... 2. 添加以下内容: { "cmd": , "path":"C:\\Python27", "file_regex": "^< >*File \"(...*?)\", line (*)", "selector": "source.python" } 把path里面的内容修改为编译器的安装目录即可。保存代码,ctrl+b便可以运行了。
阅读全文

Python 自己写ssh客户端工具

因为之前一直习惯于用CentOS,这次CentOS 7出来有一段时间了,自己才在物理机上安装上,之前有使用过Ubuntu一段时间,发现包的管理方式不太喜欢,果断换成了自己熟悉的CentOS,使用了几天后,发现特别符合我的使用习惯,总算找到自己喜欢的发行版本了。 由于是新版本的CentOS,除了启动方式使用的是systemctl管理工具,以及做了一些优化,系统使用方面其它的基本没什么变化,首先想到的是找一个GUI的ssh工具,发现安装了putty和SecureCRT都无法安装上,putty本来我也不太喜欢,SecureCRT需要python 2.6的版本,但我的系统中是python 2.7的版本,无法安装,未果。于是果断自己写一个简单的ssh命令行客户端工具,思路很简单,就是使用系统中自带的ssh命令,只是用python包装了下,没有做太多的异常处理,反正是自己使用。#!/usr/bin/env python # _*_ coding:utf-8 _*_ import os import sys #for test #os.system('ssh root@192.168.46.143'); conf_file='/etc/cssh.conf' def ReadConf(conf_file):     config_info =      with open(conf_file,"r") as fd:         while True:             c = fd.readline().strip('\n')             if c:                 config_info.append(c.split(' '))             else:                 break     return config_info def ConnectServer():     info = ReadConf(conf_file)     index = 1     for i in info:         print str(index) + ' . ' + i         index = index + 1     select = raw_input("Which server do you want to select:")     os.system('ssh '+ info + '@' + info) ConnectServer() 配置文件/etc/cssh.conf内容格式如下,第一列为用户名,第二列为IP地址:root 192.168.46.153 root 192.168.46.142 root 192.168.46.143 root 192.168.46.151 root 172.17.192.201 root 192.168.46.77 将该脚本命名为cssh,然后放到/usr/bin目录下边,就可以直接在命令名输入cssh命令来使用了:1 . 192.168.46.1532 . 192.168.46.1423 . 192.168.46.1434 . 192.168.46.1515 . 172.17.192.2016 . 192.168.46.77Which server do you want to select: 输入前边的序号即可直接使用: Which server do you want to select:6 root@192.168.46.77's password:
阅读全文

apache日志分析工具

apachelog下载地址:https://pypi.python.org/packages/source/a/apachelog/apachelog-1.0.tar.gz apachelog.py模块:#!/usr/bin/env python """Apache Log Parser Parser for Apache log files. This is a port to python of Peter Hickman's Apache::LogEntry Perl module: <http://cpan.uwinnipeg.ca/~peterhi/Apache-LogRegex> Takes the Apache logging format defined in your httpd.conf and generates a regular expression which is used to a line from the log file and return it as a dictionary with keys corresponding to the fields defined in the log format. Example:     import apachelog, sys     # Format copied and pasted from Apache conf - use raw string + single quotes     format = r'%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'          p = apachelog.parser(format)     for line in open('/var/apache/access.log'):         try:            data = p.parse(line)         except:            sys.stderr.write("Unable to parse %s" % line) The return dictionary from the parse method depends on the input format. For the above example, the returned dictionary would look like;     {     '%>s': '200',     '%b': '2607',     '%h': '212.74.15.68',     '%l': '-',     '%r': 'GET /images/previous.png HTTP/1.1',     '%t': '',     '%u': '-',     '%{Referer}i': 'http://peterhi.dyndns.org/bandwidth/index.html',     '%{User-Agent}i': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202'     } ...given an access log entry like (split across lines for formatting);     212.74.15.68 - -  "GET /images/previous.png HTTP/1.1"         200 2607 "http://peterhi.dyndns.org/bandwidth/index.html"         "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202" You can also re-map the field names by subclassing (or re-pointing) the alias method. Generally you should be able to copy and paste the format string from your Apache configuration, but remember to place it in a raw string using single-quotes, so that backslashes are handled correctly. This module provides three of the most common log formats in the formats dictionary;     # Common Log Format (CLF)     p = apachelog.parser(apachlog.formats)     # Common Log Format with Virtual Host     p = apachelog.parser(apachlog.formats)     # NCSA extended/combined log format     p = apachelog.parser(apachlog.formats) For notes regarding performance while reading lines from a file in Python, see <http://effbot.org/zone/readline-performance.htm>. Further performance boost can be gained by using psyco <http://psyco.sourceforge.net/> On my system, using a loop like;     for line in open('access.log'):         p.parse(line) ...was able to parse ~60,000 lines / second. Adding psyco to the mix, up that to ~75,000 lines / second. The parse_date function is intended as a fast way to convert a log date into something useful, without incurring a significant date parsing overhead - good enough for basic stuff but will be a problem if you need to deal with log from multiple servers in different timezones. """ __version__ = "1.0" __license__ = """Released under the same terms as Perl. See: http://dev.perl.org/licenses/ """ __author__ = "Harry Fuecks <hfuecks@gmail.com>" __contributors__ = <     "Peter Hickman <peterhi@ntlworld.com>",     >      import re class ApacheLogParserError(Exception):     pass class parser:          def __init__(self, format):         """         Takes the log format from an Apache configuration file.         Best just copy and paste directly from the .conf file         and pass using a Python raw string e.g.                  format = r'%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'         p = apachelog.parser(format)         """         self._names =          self._regex = None         self._pattern = ''         self._parse_format(format)          def _parse_format(self, format):         """         Converts the input format to a regular         expression, as well as extracting fields         Raises an exception if it couldn't compile         the generated regex....
阅读全文

python中的super继续

单继承:class ClassCaculator(object):     def __init__(self, A, B):         self.A = A         self.B = B     def Add(self):         return self.A + self.B     def Sub(self):         return abs(self.A - self.B) class SubClassCaculator(ClassCaculator):     def __init__(self,A,B,C):         ClassCaculator.__init__(A,B)         self.C = C     def Mul(self):         return self.A * self.B * self.C if __name__ == '__main__':     CA = SubClassCaculator(2,4,6)     print CA.Add()     print CA.Sub()     print CA.Mul() 多继承使用严格的super来继承:class ClassCaculator(object):     def __init__(self, A, B):         self.A = A         self.B = B     def Add(self):         return self.A + self.B     def Sub(self):         return abs(self.A - self.B) class SubClassCaculator(ClassCaculator):     def __init__(self,A,B,C):         super(SubClassCaculator,self).__init__(A,B)         self.C = C     def Mul(self):         return self.A * self.B * self.C if __name__ == '__main__':     CA = SubClassCaculator(2,4,6)     print CA.Add()     print CA.Sub()     print CA.Mul()  
阅读全文