如何通过异常终止cmd/batch文件处理python脚本退出

如何通过异常终止cmd/batch文件处理python脚本退出,python,batch-file,time,automation,event-handling,Python,Batch File,Time,Automation,Event Handling,我想在windows启动时执行python脚本。。它跟踪我的日常电脑使用情况 脚本执行将我启动电脑的时间记录为“开始时间”。当我关闭电脑时,请注意“结束时间” 由于脚本将在后台执行,当我关闭时,批处理文件将异常终止(我创建了批处理文件以在启动时运行)。 因此,我在处理这样的脚本退出以获取“endtime”时遇到了麻烦。 虽然我尝试了'sys','atexit',甚至尝试了catch语句来确定结束时间。当cmd(批处理文件cmd)通过“X”按钮关闭时,我无法提取 import time wit

我想在windows启动时执行python脚本。。它跟踪我的日常电脑使用情况

脚本执行将我启动电脑的时间记录为“开始时间”。当我关闭电脑时,请注意“结束时间”

由于脚本将在后台执行,当我关闭时,批处理文件将异常终止(我创建了批处理文件以在启动时运行)。 因此,我在处理这样的脚本退出以获取“endtime”时遇到了麻烦。

虽然我尝试了'sys','atexit',甚至尝试了catch语句来确定结束时间。当cmd(批处理文件cmd)通过“X”按钮关闭时,我无法提取


import time

with open("report_time.txt",'a') as f:
    f.write(str(int(time.time()))+ '\n')      # Start time

def main():
    try:
        while(True):
            pass
    finally:
        with open("report_time.txt",'a') as f:
            f.write(str(int(time.time()))+ '\n')   # End time(This code works fine for keyboard interrupt)
main()



这是使用WMI的VBScript。程序等待您关闭计算机。

执行此脚本时,您是否查看了CPU?紧密循环中的轮询可能不是您想要的。键盘中断与系统退出事件有着根本的不同。这可能有助于您的Python代码处于如此紧密的循环中,
最终
从不执行。如果您用调用
time.sleep()
替换了
pass
,您的运气可能会更好。您说的是什么批处理文件?您需要在程序中放入一个Ctrl+Exit线程/函数,替换windows线程/函数(终止程序)。请参阅。您可以关闭登录/审核。然后Windows会将其写入安全日志。
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery("SELECT * FROM Win32_ComputerShutdownEvent")

Do
    Set objReceivedEvent = objEvents.NextEvent
    wscript.echo objReceivedEvent.Type
Loop