読者です 読者をやめる 読者になる 読者になる

DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

pyhtonで正規表現

python2.6で正規表現したくて作ったスクリプトがあるので、メモしておきます。

邪道スクリプトですが、とある理由で「ある特定のユーザが実行しているSELECT文で60秒以上掛かっているものをKILLする」ありがちなスクリプトです。

pythonのバージョンによって、「re.」の書き方が違うようです。

p = re.compile (r'select(.*)', re.IGNORECASE)
で、大文字小文字を区別しないselect文を抽出したい対象にして

if (p.match (format (row[7])) is not None):
で、is not None つまりselect文だったら

という形で出来ました。
やっぱ正規表現perlが便利ですね。


#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
import re

if __name__ == '__main__':
connect = MySQLdb.connect (db="__DATABASENAME__", host="__HOSTNAME__", port=3306, user="__USERNAME__", passwd="__PASSWD__")
cur = connect.cursor ()
cur.execute ('show processlist')
rows = cur.fetchall ()
p = re.compile (r'select(.*)', re.IGNORECASE)
for row in rows:
print row[0], row[7], row[5]
if (row[1] == '特定のユーザ1' or row[1] == '特定のユーザ2'):
if (p.match (format (row[7])) is not None):
if (int (row[5]) > 60):
print 'kill %s' % row[0]
cur.execute ('kill %s' % row[0])

cur.close()
connect.close()