Keylogger

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Zayju
User
Beiträge: 12
Registriert: Mittwoch 22. Januar 2020, 15:43

Hallo an alle,

im Moment arbeite ich an einem Key Logger und bis auf folgendes Problem gestoßen. Ich habe in PyCharm den Code geschrieben und das Programm in eine Exe umgewandelt. Jedoch erstellt das Programm keine txt datei mehr, wo er die Tastenanschläge reinschreiben soll.

from pynput.keyboard import Key, Listener
import logging


file_log = "log.txt"
logging.basicConfig(filename=(file_log), level=logging.DEBUG, format='%(message)s')

def on_press(key):
x = logging.info(key)

with Listener(on_press=on_press) as listener:
listener.join()

In Pycharm klappt es aber sonst erstellt er diese Text Datei nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Zayju: Was ist denn das aktuelle Arbeitsverzeichnis wenn Du die Exe startest? Denn *dort* wird die Datei gespeichert.

Warum sind da unnötige Klammern um den Wert vom `filename`-Argument von `logging.basicConfig()`?

Was soll die Zuweisung des Rückgabewertes von `logging.info()` an einen Namen der dann nicht verwendet wird? Warum ist dieser Name `x`?

Wenn eine Funktion einfach nur eine andere Funktion mit genau den gleichen Argumenten aufruft die sie selbst bekommen hat, sollte man darüber nachdenken warum man da eine Funktion zwischenschaltet die im Grunde nichts sinnvolles tut.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Zayju: Nachtrag: Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

`file_log` ist ein komischer Name. Das sollte wohl eher `log_filename` heissen. Und da es eine Konstante ist, komplett gross geschrieben werden.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import logging

from pynput.keyboard import Key, Listener

LOG_FILENAME = "log.txt"

logging.basicConfig(
    filename=LOG_FILENAME, level=logging.DEBUG, format="%(message)s"
)


def main():
    with Listener(on_press=logging.info) as listener:
        listener.join()


if __name__ == "__main__":
    main()
Logging finde ich ein bisschen komisch für diese Aufgabe, denn das ist ja eigentlich nur das schreiben der Tasten in eine (möglicherweise vorhandene) Textdatei, ohne das man wirklich etwas vom `logging`-Modul verwendet was das über ein normales schreiben in eine Textdatei so bietet.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Zayju
User
Beiträge: 12
Registriert: Mittwoch 22. Januar 2020, 15:43

__blackjack__ hat geschrieben: Donnerstag 7. Mai 2020, 23:24 Wenn ich mir mit pyinstaller eine exe erstelle, wird ein Verzeichnis dist angelegt, wo diese Datei dann abgespeichert wird. Doch selbst wenn ich die Exe ausführe wird dort nichts gespeichert
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Zayju: Wie führst Du die Exe denn aus? Öffnest Du ein Konsolenfenster, wechselst mit ``cd`` in das Verzeichnis, und führst sie dann durch Eingabe des Exe-Namens + Eingabetaste aus?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten