Pyw脚本在一段时间后死了
Pyw script dies after a while
while True:
try:
# send some mail
time.sleep(hours*60*60)
except:
time.sleep(60)
此脚本应该每 x 小时发送一封电子邮件。确实如此。如果失败,应稍等片刻再试。我在将小时设置为 0.01(36 秒)的情况下对其进行了测试,即使我关闭并重新打开 wifi,它也能正常工作。但是当我将它设置为 2 小时并等待时,什么也没有发生。 Pythonw 进程刚刚消失。
您应该将其重命名为 .py
并观察控制台输出。
或者,更好的是,设置未处理异常的日志记录(见下文)。一般来说,如果脚本要运行无人看管,您必须使用日志记录来报告脚本的进度:您没有其他方法可以知道它发生了什么!
例如当脚本开始等待很长时间时,您可以报告它何时开始等待以及等待多长时间 - 这将为您弄清楚事情。
以下是我如何在我的脚本中设置日志记录,这些脚本将在后台 运行 延长时间:
# set up logging #####################################
import sys,logging,logging.handlers,os.path
logfile = os.path.splitext(os.path.basename(sys.argv[0]))[0]+".log"
l = logging.getLogger()
l.setLevel(logging.DEBUG)
f = logging.Formatter('%(asctime)s %(process)d:%(thread)d %(name)s %(levelname)-8s %(message)s')
h=logging.StreamHandler(sys.stdout)
h.setLevel(logging.NOTSET)
h.setFormatter(f)
l.addHandler(h)
h=logging.handlers.RotatingFileHandler(logfile,maxBytes=1024**2,backupCount=1)
h.setLevel(logging.NOTSET)
h.setFormatter(f)
l.addHandler(h)
del h,f
#hook to log unhandled exceptions
def excepthook(type,value,traceback):
logging.error("Unhandled exception occured",exc_info=(type,value,traceback))
#Don't need another copy of traceback on stderr
if old_excepthook!=sys.__excepthook__:
old_excepthook(type,value,traceback)
old_excepthook = sys.excepthook
sys.excepthook = excepthook
del excepthook,logfile
# ####################################################
while True:
try:
# send some mail
time.sleep(hours*60*60)
except:
time.sleep(60)
此脚本应该每 x 小时发送一封电子邮件。确实如此。如果失败,应稍等片刻再试。我在将小时设置为 0.01(36 秒)的情况下对其进行了测试,即使我关闭并重新打开 wifi,它也能正常工作。但是当我将它设置为 2 小时并等待时,什么也没有发生。 Pythonw 进程刚刚消失。
您应该将其重命名为 .py
并观察控制台输出。
或者,更好的是,设置未处理异常的日志记录(见下文)。一般来说,如果脚本要运行无人看管,您必须使用日志记录来报告脚本的进度:您没有其他方法可以知道它发生了什么!
例如当脚本开始等待很长时间时,您可以报告它何时开始等待以及等待多长时间 - 这将为您弄清楚事情。
以下是我如何在我的脚本中设置日志记录,这些脚本将在后台 运行 延长时间:
# set up logging #####################################
import sys,logging,logging.handlers,os.path
logfile = os.path.splitext(os.path.basename(sys.argv[0]))[0]+".log"
l = logging.getLogger()
l.setLevel(logging.DEBUG)
f = logging.Formatter('%(asctime)s %(process)d:%(thread)d %(name)s %(levelname)-8s %(message)s')
h=logging.StreamHandler(sys.stdout)
h.setLevel(logging.NOTSET)
h.setFormatter(f)
l.addHandler(h)
h=logging.handlers.RotatingFileHandler(logfile,maxBytes=1024**2,backupCount=1)
h.setLevel(logging.NOTSET)
h.setFormatter(f)
l.addHandler(h)
del h,f
#hook to log unhandled exceptions
def excepthook(type,value,traceback):
logging.error("Unhandled exception occured",exc_info=(type,value,traceback))
#Don't need another copy of traceback on stderr
if old_excepthook!=sys.__excepthook__:
old_excepthook(type,value,traceback)
old_excepthook = sys.excepthook
sys.excepthook = excepthook
del excepthook,logfile
# ####################################################