tools/scripts/crc32test/crc32test.py
2019-01-31 17:00:21 +08:00

74 lines
2.2 KiB
Python

#coding utf8
#!/usr/bin/python
import os
import sys
import time
import binascii
import pymysql
import threading
import subprocess
from optparse import OptionParser
def printp_stdout(p):
try:
while True:
line = p.stdout.readline()
if len(line) > 0 and line != b'crc32test start\n':
accountid, phpcrc32 = line.strip().decode('utf-8').split(' ')
pycrc32 = str(binascii.crc32(accountid.encode('utf-8')))
assert int(phpcrc32) < 0xFFFFFFFF
assert phpcrc32 == pycrc32
print(accountid + ' ' + phpcrc32 + ' ' + pycrc32 + '\n', end = '', flush = True)
except Exception as e:
print('crc32test stdout error:' + str(e), flush = True)
def printp_stderr(p):
try:
while True:
line = p.stderr.readline()
if len(line) > 0:
print(line, end = '', flush = True)
except Exception as e:
print('crc32test stderr error:' + str(e), flush = True)
def printp_stdin(p):
try:
for i in range(1, 20):
dbname = 'accountdb_bk' + str(i)
db = pymysql.connect('127.0.0.1',
'root',
'keji178',
dbname)
cursor = db.cursor()
cursor.execute('select accountid from accounts')
for row in cursor.fetchall():
p.stdin.write((row[0] + "\n").encode('utf-8'))
p.stdin.flush()
except Exception as e:
print('crc32test stdin error:' + str(e), flush = True)
def run_test():
try:
p = subprocess.Popen(
'php test.php',
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell = True)
t1 = threading.Thread(target = printp_stdout, args=(p, ))
t2 = threading.Thread(target = printp_stderr, args=(p, ))
t3 = threading.Thread(target = printp_stdin, args=(p, ))
t1.start()
t2.start()
t3.start()
p.wait()
t1.join()
t2.join()
t3.join()
sys.exit(p.returncode)
except Exception as e:
print('run_test error:' + str(e), flush = True)
run_test()