红联Linux门户
Linux帮助

今天发现python windows运行正常,linux下异常

发布时间:2016-11-12 10:56:04来源:linux网站作者:vb人
好久没使用Python,基本上以前学的一点皮毛也忘记完了。今天想在linux中处理xls文件,然后存到数据库中,想用简单的Python来处理。好久没用了,加上用的Python3.5.2新版本,简单的事情还真废了不少劲。具体工作是linux下某个目录,会有文件定期穿上来(15分钟一次),对其中最新的一个xls文件进行处理,读取数据到mysql存储,然后删除目录下所有文件。程序每10分钟运行一次。windows里程序调试完了,但是传到linux上运行不正常。
 
首先文件编辑后提示不认识的编码utf-8,应为我的Linux系统默认的是中文gb18030,Python 文件中用的utf-8,修改成gb18030就OK了,这个问题解决了有遇到个奇葩事情。
 
/home/pon目录下木有xls文件的时候要报错,有的时候就不报错,我添加了判断语句l=os.listdir(path) len(l)>0 才执行,搞了很久没解决,后然实在不行了,把l这个数组打印出来看,打印出来吓一跳,目录下没文件,怎么显示有四个文件,shell 下用ls -al 一看,原来真有几个隐藏文件。好吧增加个工作,先判断下目录下有没有.xls文件。网上看了下,没找到简单的方法,自己想了个,把l这个数组转换成字符串,然后判断字符串中是否包含.xls,就这样坚决了。
 
最后就是让代码在后台运行,直接 在运行命令后加& 但是用jobs命令看,发现stoped,貌似程序没运行了。想起还是用screen -S 新建个窗口,运行代码,然后Ctrl+a d detach这个窗口,让他后台运行。搞了几个小时终于搞定了。
 
Python代码如下,差不多忘记完了。
#--coding:gb18030--
#filename:man_pon_alarms.py
import pymysql.cursors
import xlrd
import os
import time
import glob
# Connect to the mysql database
#import os,os.path,datetime
def main():
base_dir=r"/home/pon/"
l=os.listdir(base_dir)   
#confirm the dirpath has xls file
if (''.join(l).find(".xls"))>0: 
l.sort(key=lambda fn: os.path.getmtime(base_dir+fn) if not os.path.isdir(base_dir+fn) else 0)
workbook = xlrd.open_workbook(base_dir+l[-1])
worksheet1 = workbook.sheets()[0]
num_cols = worksheet1.ncols
num_rows = worksheet1.nrows
num_cols = worksheet1.ncols
connection = pymysql.connect(host='175.155.1.3',
user='popon',
password='pon-pop-3',
db='db_pon_alarm',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
for rown in range(3,num_rows-1):
# Create a new record
sql = "INSERT INTO tb_PonAlarms(NetCell, NetCellLocal,AlarmCode,AlarmNote,AlarmTime,AlarmText,NetIP) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')"
cursor.execute(sql%(worksheet1.cell_value(rown,2), worksheet1.cell_value(rown,3),worksheet1.cell_value(rown,6),worksheet1.cell_value(rown,7),worksheet1.cell_value(rown,8),worksheet1.cell_value(rown,11),worksheet1.cell_value(rown,23)))
connection.commit()
print("read alarms succed")
finally:
connection.close()
for filename in os.listdir(base_dir):
if '.xls' in filename:
os.remove(base_dir+filename)
def timer(n):
while True:
print('program round start at:',time.strftime('%Y-%m-%d %X',time.localtime()))
main()
print('program round finished at:',time.strftime('%Y-%m-%d %X',time.localtime()))
print('next round will start after %d second'%n)
time.sleep(n)
if __name__ == '__main__':
timer(600)
 
本文永久更新地址:http://www.linuxdiyf.com/linux/25947.html