Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2010 06:49:34

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

сделал колесо - скрипт шедуллер
вкратце:

def log(s):
dtime = time.strftime('%y/%m/%d(%w) %H:%M',time.localtime( time.time() ))
open('lsh.log','a').write('%s: %s\n' % (dtime,s))

def main():
while 1:
try:
time.sleep(3)
d = time.localtime( time.time() )
ds = time.strftime('%m/%d/%w %H:%M',d)
if ds==ds_old: continue
ds_old = ds
print ds

except Exception as e:
log('except main loop: %s' % (str(e),))
такой вот безобидный цикл несколько раз в день выбрасывает в exception:
10/02/11(4) 05:17: except main loop: [Errno 9] Bad file descriptor
весь исходник
# coding: utf-8

import time,re,os

# cron
# sec min hour day mon wday

jobs = []

def log(s):
dtime = time.strftime('%y/%m/%d(%w) %H:%M',time.localtime( time.time() ))
open('lsh.log','a').write('%s: %s\n' % (dtime,s))

def start(dtime,com):
log(com)
print 'start:',com
# ch dir
cur = os.getcwd()
path = com
f = path.rfind('\\')
if f>=0: path = path[:f]
try:
os.chdir(path)
# start
import subprocess
subprocess.Popen(com, shell = True)
os.chdir(cur)
except:
log('except %s' % (com,))

def loadjobs(fname='lsh.lsh'):
global jobs
for s in open(fname,'r').readlines():
s = s.rstrip()
if s and s[0]!='#':
f = s.find(':')
if f:
job = s[:f]
com = s[f+1:]
if job == 'import':
if fname!=com: loadjobs(com)
elif job == '@restart': start('start',com)
else: jobs.append([job,com])

def test(d,job):
#m = [d.tm_sec, d.tm_min, d.tm_hour, d.tm_mday, d.tm_mon, d.tm_wday]
m = [d.tm_min, d.tm_hour, d.tm_mday, d.tm_mon, d.tm_wday]
d = job.split(',')
if len(d)!=5:
print 'error in job time settings'
return 0

for n,j in enumerate(d):
min = m[n]
for t in j.split(' '):
# * /2 /1
if t=='*': continue
if (t=='/1') and (min%2 == 1): continue
if (t=='/2') and (min%2 == 0): continue
# int
r = re.match(r'^(\d+)$',t)
if r and int(r.groups(0)[0])==min: continue
# a-b
r = re.match(r'^(\d+)-(\d+)$',t)
if r and ( int(r.groups(0)[0]) <= min <= int(r.groups(0)[1]) ): continue
#
return 0
return 1

def main():
ds_old = ''
while 1:
try:
time.sleep(3)
d = time.localtime( time.time() )
ds = time.strftime('%m/%d/%w %H:%M',d)
if ds==ds_old: continue
ds_old = ds
print ds

for job in jobs:
if test(d,job[0]): start(ds,job[1])
except Exception as e:
log('except main loop: %s' % (str(e),))

log('start')
loadjobs() # загрузка данных
main() # основная программа

Офлайн

#2 Фев. 11, 2010 11:07:10

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

exception на пустом месте, откуда?

Файл лучше закрывать, а еще лучше использовать стандартный модуль logging.



Офлайн

#3 Фев. 11, 2010 12:10:25

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

truporez
Файл лучше закрывать, а еще лучше использовать стандартный модуль logging.
по идее файл должен закрываться при входе из функции. переделал на logging, поглядим…

Офлайн

#4 Фев. 11, 2010 19:01:13

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

не помогло:

2010-02-11 21:09:02,703 CRITICAL except main loop: [Errno 9] Bad file descriptor
кстате, это все под виндой

исходник:
# coding: utf-8

import logging
logging.basicConfig(filename='lsh.log',format='%(asctime)s %(levelname)s %(message)s',level=logging.DEBUG)

import time,re,os

jobs = []

def start(dtime,com):
logging.info(com)
print 'start:',com
# ch dir
cur = os.getcwd()
path = com
f = path.rfind('\\')
if f>=0: path = path[:f]
try:
os.chdir(path)
# start
import subprocess
subprocess.Popen(com, shell = True)
os.chdir(cur)
except Exception as e:
logging.error('except %s' % (str(e),))

def loadjobs(fname='lsh.lsh'):
global jobs
for s in open(fname,'r').readlines():
s = s.rstrip()
if s and s[0]!='#':
f = s.find(':')
if f:
job = s[:f]
com = s[f+1:]
if job == 'import':
if fname!=com: loadjobs(com)
elif job == '@restart': start('start',com)
else: jobs.append([job,com])

def test(d,job):
#m = [d.tm_sec, d.tm_min, d.tm_hour, d.tm_mday, d.tm_mon, d.tm_wday]
m = [d.tm_min, d.tm_hour, d.tm_mday, d.tm_mon, d.tm_wday]
d = job.split(',')
if len(d)!=5:
print 'error in job time settings'
return 0

for n,j in enumerate(d):
min = m[n]
for t in j.split(' '):
# * /2 /1
if t=='*': continue
if (t=='/1') and (min%2 == 1): continue
if (t=='/2') and (min%2 == 0): continue
# int
r = re.match(r'^(\d+)$',t)
if r and int(r.groups(0)[0])==min: continue
# a-b
r = re.match(r'^(\d+)-(\d+)$',t)
if r and ( int(r.groups(0)[0]) <= min <= int(r.groups(0)[1]) ): continue
#
return 0
return 1

def main():
ds_old = ''
while 1:
try:
time.sleep(3)
d = time.localtime( time.time() )
ds = time.strftime('%m/%d/%w %H:%M',d)
if ds==ds_old: continue
ds_old = ds
print ds

for job in jobs:
if test(d,job[0]): start(ds,job[1])
except Exception as e:
logging.critical('except main loop: %s' % (str(e),))

logging.info('start')
loadjobs()
main()

Офлайн

#5 Фев. 11, 2010 22:30:15

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

Давайте пример файла lsh.lsh, чтобы хотя бы запустить скрипт.



Офлайн

#6 Фев. 12, 2010 11:49:57

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

можно использовать пустой файл, а сейчас у меня вот этот:

#min,hour,day,month,wday:command
#*,*,*,*,*:/home/user;echo 'hello' >> 1.txt
#import:other.lsh
#/1,*,*,*,0-4:every two minutes for work day
@restart:C:\home\vampir\SWEB_history\trunk\w.py
@restart:C:\home\vampir\SWEB_history\trunk\DataEater.py
@restart:C:\home\vampir\SWEB_history\trunk\e_rpc_serv.py
0,8-20,*,*,*:..\nestle_log_transfer\nestle_trace.py
0,8,*,*,*:C:\home\lega\scripts\1c_referror.py
0,14,*,*,*:C:\home\lega\scripts\1c_referror.py
за ночь ещё 2 ексепта выскочило:
2010-02-12 02:02:02,365 CRITICAL except main loop: [Errno 9] Bad file descriptor
2010-02-12 06:55:02,563 CRITICAL except main loop: [Errno 9] Bad file descriptor

Отредактировано (Фев. 12, 2010 11:51:33)

Офлайн

#7 Фев. 12, 2010 14:31:32

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

Дайте полный лог, а не только ошибки.



Офлайн

#8 Фев. 12, 2010 15:05:16

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

Если использовать logging.exception вместо logging.critical будет больше информации по ошибке.



Отредактировано (Фев. 12, 2010 15:14:40)

Офлайн

#9 Фев. 12, 2010 18:27:00

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

Lexander
Дайте полный лог, а не только ошибки.
лог ни какой ясности не внесет, но вот…
2010-02-11 16:41:02,227 INFO start
2010-02-11 16:41:02,227 INFO C:\home\vampir\SWEB_history\trunk\w.py
2010-02-11 16:41:02,243 INFO C:\home\vampir\SWEB_history\trunk\DataEater.py
2010-02-11 16:41:02,259 INFO C:\home\vampir\SWEB_history\trunk\e_rpc_serv.py
2010-02-11 17:00:02,267 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-11 18:00:02,292 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-11 19:00:02,270 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-11 20:00:02,749 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-11 21:09:02,703 CRITICAL except main loop: [Errno 9] Bad file descriptor
2010-02-12 02:02:02,365 CRITICAL except main loop: [Errno 9] Bad file descriptor
2010-02-12 06:55:02,563 CRITICAL except main loop: [Errno 9] Bad file descriptor
2010-02-12 08:00:02,489 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-12 09:00:02,654 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-12 10:00:02,678 INFO ..\nestle_log_transfer\nestle_trace.py
2010-02-12 10:27:39,710 INFO start
2010-02-12 10:27:39,710 INFO C:\home\vampir\SWEB_history\trunk;w.py
2010-02-12 10:27:39,726 INFO C:\home\vampir\SWEB_history\trunk;DataEater.py
2010-02-12 10:27:39,740 INFO C:\home\vampir\SWEB_history\trunk;e_rpc_serv.py
2010-02-12 11:00:00,720 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 12:00:00,713 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 13:00:00,799 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 13:56:44,640 INFO start
2010-02-12 13:56:44,640 INFO C:\home\vampir\SWEB_history\trunk;w.py
2010-02-12 13:56:44,640 INFO C:\home\vampir\SWEB_history\trunk;DataEater.py
2010-02-12 13:56:44,655 INFO C:\home\vampir\SWEB_history\trunk;e_rpc_serv.py
2010-02-12 14:00:02,871 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 14:00:02,887 INFO C:\home\lega\scripts;1c_referror.py
2010-02-12 15:00:00,071 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 16:00:00,063 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 17:00:00,558 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 17:15:04,086 INFO start
2010-02-12 17:15:04,086 INFO C:\home\vampir\SWEB_history\trunk;w.py
2010-02-12 17:15:04,086 INFO C:\home\vampir\SWEB_history\trunk;DataEater.py
2010-02-12 17:15:04,102 INFO C:\home\vampir\SWEB_history\trunk;e_rpc_serv.py
2010-02-12 17:15:04,118 INFO C:\home\lega\squidreader;web.py
2010-02-12 18:00:01,066 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 19:00:01,013 INFO ..\nestle_log_transfer;nestle_trace.py
2010-02-12 20:00:00,990 INFO ..\nestle_log_transfer;nestle_trace.py
а вот использовать logging.exception - хорошая идея

ЗЫ: сегодня с утра ещё ни одного исключения не выскакивало, скрипт несколько раз перезапускал

Офлайн

#10 Фев. 12, 2010 19:02:46

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

exception на пустом месте, откуда?

свежий екцепт:

2010-02-12 21:43:00,904 CRITICAL except main loop: [Errno 9] Bad file descriptor
время - район 21 часа, вчера так же.

заюзал logging.exception, завтра поглядим :)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version