2014-12-06 107 views
2

我想记录(到txt文件中)Python脚本停止的时间。与此有关的问题是关于逻辑:记录python脚本停止的时间?

如果停止,它必须知道它什么时候它 - 但如果它关闭,它怎么知道?在它发生之前,它必须知道大约1秒钟之前的关闭。这使我进入下一个阶段:

进程"python.exe"的看门狗,但由于上下文中我想使用它而不起作用:我想知道我的计算机什么时候通过Python脚本关闭。

这样做的目的是记录关机(睡眠)并重新启动/唤醒计算机(事件查看器似乎没有记录所有这些,所以我说,嘿,为什么不这样做?)

+0

为什么不直接在脚本中调用shutdown方法之前写下时间?你的脚本中没有任何控制权吗?我不明白你的问题。你担心什么东西会导致你的流程失效,或者? – bosnjak 2014-12-06 13:46:21

+0

我确实有控制权 - 但脚本怎么知道我什么时候在笔记本电脑上按“睡眠”(或长按关机)?我想如果我总是按“关机”,我不会这么做。我现在对“睡眠”更感兴趣,因为我很少关闭笔记本电脑。说得通?另外,我不知道“关机”的含义,所以你可能是对的! – Benjamin 2014-12-06 13:50:59

+0

是的,这是有道理的。在下面检查我的答案。 – bosnjak 2014-12-06 13:51:29

回答

3

对于常规的终端,我会建议使用atexit模块: https://docs.python.org/2/library/atexit.html

您可以编写脚本终止这样的时候:

import datetime 
import atexit 

def leaving(): 
    open("my.log", "w").write("I was closed at %s" % datetime.datetime.now()) 

atexit.register(leaving) 

另一种方法是用装饰,里柯本:

import atexit 

@atexit.register 
def leaving(): 
    import datetime 
    open("my.log", "w").write("I was closed at %s" % datetime.datetime.now()) 
+0

工程就像一个魅力。谢谢,将选择作为答案。 – Benjamin 2014-12-06 13:53:57

+0

装饰器使用仅适用于不带参数调用的函数。 – 2014-12-06 13:55:20

+0

这对于这个目的是可以的:) – bosnjak 2014-12-06 13:55:52

1

在finally块任何保证运行,这样你就可以做到这一点,只要你不赶SystemExitBaseException,这得到了关机信号或键盘中断:

import logging 
import time 

logger = logging.getlogger(__name__) 

def process(): 
    '''this can be anything, sleep is probably least resource consumptive''' 
    while 1: 
     time.sleep(5) 

def main(): 
    try: 
     process() 
    finally: # guaranteed to run, so long as Python gets an error, 
      # shutdown signal or keyboard interrupt. 
     logger.info('shutdown at {0}'.format(datetime.datetime.now())) 

if __name__ == '__main__': 
    main() 
+0

试图让它工作。 process()代表什么? :) – Benjamin 2014-12-06 13:56:29

+0

它代表你的主要过程。 – 2014-12-06 13:57:03

+0

即您的程序在等待完成的同时执行的任何操作。如果你没有工作要做,它可以只是'而真:通过' – bosnjak 2014-12-06 13:57:49