2014-12-06 61 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