Sep 27

有一段日志,需要提取括号中的一些值,组成新文件.

spawn runmqsc dcllf.mqm
display queue('q_*') curdepth
end
5724-H72 (C) Copyright IBM Corp. 1994, 2005.  ALL RIGHTS RESERVED.
启动队列管理器 dcllf.mqm 的 MQSC。


     1 : display queue('q_*') curdepth
AMQ8409: 显示队列细节。
   QUEUE(q_act_shell_act)                  TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_act_shell_control)              TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_act_shell_module)               TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mo_log)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_act_1)                   TYPE(QLOCAL)
   CURDEPTH(11)                         
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_act_2)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_act_3)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_batch_1)                 TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_mt_log)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mms_report)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_act)                         TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_old_mms)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_old_sms)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_route)                       TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_tp)                          TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mo_tp_provision)                TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_mt_tp_msgid)                    TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_performance_test)               TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mo_log)                     TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_act_1)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_act_2)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_act_3)                   TYPE(QLOCAL)
   CURDEPTH(0)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_mt_log)                     TYPE(QLOCAL)
   CURDEPTH(6)                          
AMQ8409: 显示队列细节。
   QUEUE(q_sms_report)                     TYPE(QLOCAL)
   CURDEPTH(51)                         
     2 : end
读取一个 MQSC 命令。
所有命令均无语法错误。
已处理所有的有效 MQSC 命令。

有人提供了这样一种办法

 

我觉得不优雅,应该有更好的办法,于是想到用正则. 主要涉及反向引用,非贪婪模式和多行匹配模式.

 

#!/usr/bin/env python3

import re
data = open('mqwatch.txt', 'r').read()
b = re.findall('QUEUE\((.*?)\).*?CURDEPTH\((\d+)\)', data, re.S)
x = ';'.join(['%s,%s' % (i[0], i[1]) for i in b])
print(x)
May 3

ERROR [IM014] [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程 序之间的体系结构不匹配
环境:win8+ oracle64bit server+ oracle 32bit + vs2010
要对这两个单独进行配置。如果单纯配置64位的,则vs2010添加数据源有问题,如果单独配置32位的,则vim下的手工代码(需要64位的)有问题。
使用不同的dsn即可避免覆盖的问题.
附上vim的手工代码
 

Apr 7
zipfile.is_zipfile(filename)

Returns True if filename is a valid ZIP file based on its magic number, otherwise returns False. filename may be a file or file-like object too.

Changed in version 3.1: Support for file and file-like objects.

这是手册中的介绍

python版本 3.3.5

Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
 

这是我的代码

def unpack():
    BASE_DIR = os.path.abspath(".")
    TAR_DIR = os.path.join(BASE_DIR, 'tar')
    tars = map(lambda x: os.path.join(TAR_DIR, x), os.listdir(TAR_DIR))
    for x in tars:
        if tarfile.is_tarfile(x):
            print(x)
            #myfile = tarfile.TarFile(x, 'r')
            #tarfile.TarFile.extractall(myfile, TAR_DIR)
        elif zipfile.is_zipfile(x):
            myfile = zipfile.ZipFile(x, 'r')
            f = myfile.namelist()[0]
            p = os.path.join(TAR_DIR, f)
            if not os.path.exists(p):
                zipfile.ZipFile.extractall(myfile, TAR_DIR)

bug出现的情况: 在测试flup-py3.3-master.zip是否为zifile时, 即zipfile.is_zipfile(x), 出现以下错误

Traceback (most recent call last):
  File "install.py", line 48, in <module>
    unpack_install()
  File "install.py", line 36, in unpack_install
    if tarfile.is_tarfile(x):
  File "C:\Python33\lib\tarfile.py", line 2444, in is_tarfile
    t = open(name)
  File "C:\Python33\lib\tarfile.py", line 1573, in open
    return func(name, "r", fileobj, **kwargs)
  File "C:\Python33\lib\tarfile.py", line 1638, in gzopen
    fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj)
  File "C:\Python33\lib\gzip.py", line 184, in __init__
    fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
PermissionError: [Errno 13] Permission denied: 'F:\\dep\\tar\\flup-py3.3-master'
 
shell returned 1

原因是之前已经解压过在它所在的目录.

[待证]更进一步,应该是测试时,使用了当前目录作为试解压的目录. 因为已经有flup-py3.3-master这个目录了.所以错误就出现了.

附下载地址 flup-py3.3-master.zip

 

Apr 6

终于轮到我写笔记了. 我的目标是, 简单. 直接贴配置好了.

django: 应用服务器

flup: windows下的python cgi支持

nginx: 网页服务器

第一个坑: django admin的静态文件 调试时没有问题,可是用nignx时有问题.

经过查看nginx的日志, 必须把静态文件带过去static的目录或者指定

 

第二个坑: 运行cgi时出现黑窗口如何解决

使用 RunHiddenConsole 来搞定

网上介绍了cgi运行的办法(会有黑窗口)  run_cgi8801.bat

@echo off
python manage.py runfcgi method=threaded host=127.0.0.1 port=8801

Apr 1

WMI是什么

Windows管理规范(WMI)是Microsoft基于Web的企业管理(WBEM)的实现,这是一个行业计划,为有关计算机系统的几乎任何信息提供了一个公用信息模型(CIM)。

Python WMI模块是在pywin32扩展之上的轻量级封装,并隐藏了一些Python需要调用WMI API的凌乱管道。这是纯粹的Python, 应该兼容从2.1后(list comprehensions)任何版本Python及任何新版本的pywin32。

Mar 31

  • 翻译工具: google译者工具包
  • 文档: python 3.3.5 自带文档
  • 翻译比例: 人工翻译60%
  • 一律不翻译包名

只翻译目录部分,方便自己查阅. 有些词可能译得不够地道. 

导航

·        目录

·        模块 |

·        下一个 |

·        上一个 |

·        

·        大蟒 »

·        3.3.5文档 »

Python标准库

当 Python语言参考 描述了Python语言的确切语法和语义,这个类库参考手册描述了和Python一起分发的标准库 它也描述一些通常包含在Python发行版中的可选组件 

Python的标准库是拓展性很强的,提供范围广泛的工具,如下列内容的长列表所示 . 该库包含内置模块(用C语言编写),提供访问系统功能,如文件I / O,否则Python程序员将无法访问,以及用Python编写的模块,为发生在日常编程许多问题提供标准化的解决方案 其中一些模块都明确旨在鼓励和加强Python程序的可移植性 , 通过抽象出具体平台为与平台无关的API 

Python在Windows平台的安装程序通常包括整个标准库,通常还包括许多其他组件 对于类Unix操作系统的Python通常作为包的集合,因为它可能需要使用随操作系统获得一些可选组件或全部打包工具 

Mar 28

中华人民共和国主席令

第七号

  《全国人民代表大会常务委员会关于修改<中华人民共和国消费者权益保护法>的决定》已由中华人民共和国第十二届全国人民代表大会常务委员会第五次会议于2013年10月25日通过,现予公布,自2014年3月15日起施行。

 中华人民共和国主席 习近平

 2013年10月25日

 

中华人民共和国消费者权益保护法

(1993年10月31日第八届全国人民代表大会常务委员会第四次会议通过根据2009年8月27日第十一届全国人民代表大会常务委员会第十次会议《关于修改部分法律的决定》第一次修正根据2013年10月25日第十二届全国人民代表大会常务委员会第五次会议《关于修改<中华人民共和国消费者权益保护法>的决定》第二次修正)

  

Mar 28

就介绍了三个程序  

  1. Ext2Fsd

  2. DiskInternals Linux Reader

  3. Ext2explore

 

原文地址: http://www.howtogeek.com/112888/3-ways-to-access-your-linux-partitions-from-windows/

 

如果你是Windows和Linux的双引导, 有时你很可能需要从Windows访问Linux上的文件. Linux内建支持NTFS分区, 但Windows却不支持Linux分区, 如果不使用第三方软件.

以下列表专注于支持Ext4文件系统(多数新Linux发行版默认使用的文件系统)的应用程序. 这些程序同时也支持Ext2和Ext3, 并且 其中之一还支持ReiserFS.


Ext2Fsd

Ext2Fsd是一个支持Ext2, Ext3和Ext4文件系统的文件系统驱动. 它能让Windows原生地读取Linux文件系统, 通过提供盘符来访问Linux文件系统, 任何程序都可以访问Linux文件系统.

你可以在每回电脑启动时运行或者当你需要时才运行Ext2Fsd. 理论上, 你可以启用Linux分区的写支持, 不过我还没测试过它. 我很担心(写支持)这个选项, 很可能会出错. 只读支持是没有问题的, 但不要冒险把硬盘分区搞砸了.

The Ext2 Volume Manager application allows you to define mount points for your Linux partitions and change Ext2Fsd’s settings.

....未完

Mar 22

翻译自: http://docs.python.org/3/library/math.html

实用至上,所以我并不会把他们全部内容都翻译出来.

数论及表示函数

math.ceil(x)

返回大于等于x的最小的整数 如果x不是小数,则返回自身.

>>> ceil(10)
10
>>> ceil(10.1)
11
>>> ceil(-10.1)
-10

math.copysign(xy)

返回x的绝对值乘以加上y的符号(正负) 即|x|*y的符号

Mar 21
#python内置函数(2)
 isinstance(object, classinfo)
    object是不是classinfo的一个实例, 返回真假
issubclas(class, classinfo)
    class是不是classinfo的一个实例, 返回真假
iter(object[,sentinel])
    例子:
with open('mydata.txt') as fp:
    for line in iter(fp.readline, ''):
        process_line(line)
len(s)
    返回s的长度
list([iterable])
    返回列表
map(function, iterable, ...)
    对于iterable中的每一个元素,执行function,返回和iterable一样的长度
max(iterable[,args...], *[,key])
    返回iterable最大值
memoryview(obj)
    返回obj的内存视图?
min(iterable[,args...], *[,key])
    返回iterable最小值
next(iterable[, default])
    返回iterable的下一个元素
object()
    返回新对象 object是所有类的基类
oct(x)
    返回8进制
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 
    打开文件(选项很多自行看手册罢)
ord(c)
    返回c在unicode中的序列值
pow(x, y[, z])
    返回pow(x, y) % z 
    pow(x, y) 相当于x**y(x的y次方)
print([object, ...], *, sep=' ', end='\n', file=sys.stdout, flush=False)
    打印
property(fget=None, fset=None, fdel=None, doc=None) 
    返回属性(手册有很多说明)
    例子
class C:
    def __init__(self):
        self._x = None
    def getx(self):
        return self._x
    def setx(self, value):
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")
range([start], stop[, step])
    返回迭代器
repr(object)
    返回object可打印的str
reversed(seq)
    返回反转seq的迭代器
round(x[, n])
   ... 
set([iterable])
    返回iterable的集合
setattr(object, name, value)
    设置对象object属性name值value
slice([start],stop[, step])
    切片
sorted(iterable[,key][,reverse])
    返回已经排序的iterable(直接改变iterable)
staticmethod(function)
    返回函数的静态方法????
str([object[, encoding[, errors]]])
    返回str
sum(iterable[, start])
    返回和
super([type[, object-or-type]])
    ????
tuple([iterable])
    返回元组
type(object)
    查看object属于何类
type(name, bases, dict)
    返回新的类
vars([object])
    ???
zip(*iterables)
    ???
__import__(name, globals=None, locals=None, fromlist=(), level=0) 
    我累了....自己看手册吧