Когда я использовал def foo(time = calculate_time()): ...
, параметры (time
) равны 0
I предположим, , что присвоение аргумента ключевого слова или atexit процесс отличается от основного процесса, поэтому время не имеет значения
from time import time as get_time()
start_time = get_time() # Calculated at the time the application starts
def calculate_time():
global start_time
return get_time() - start_time
...
# Set the function which executed on exit
atexit.register(save_to_file)
Пожалуйста, посмотрите на строки комментариев в коде, который является моим скриптом KeyLogger:
Пример проблемного случая:
- Запуск скрипта Python
- Немедленно нажмите END Кнопка
- С плавающим нулевым исключением при выполнении
atexit.register(save_to_file)
- Строка:
lines.append(f"Saniye başı tuş basımı (key/s): {len(pressedKeys) / passing_time}")
from pynput import keyboard
import atexit
from time import time as get_time
from datetime import datetime
LOG_FILE = "keyLog.txt"
DELIM = "|"
TIME_LIMIT = 20 * 60
start_time = get_time()
pressedKeys = []
def calculate_time():
global start_time
return get_time() - start_time
# Why calculate_time() returns 0 ?
def save_to_file(passing_time = calculate_time()):
global pressedKeys
if passing_time is None:
passing_time = calculate_time() # Why calculate_time() doesn't return ?
with open(LOG_FILE, "a+", encoding="utf-8") as file:
lines = []
lines.append(f"\n\n\n\n")
lines.append(f"Tarih (Yıl-Ay-Gün Saat-Dakika-Saniye.): {datetime.now()}")
lines.append(f"Geçen süre (s): {passing_time}")
lines.append(f"Basılan karakter: {len(pressedKeys)}")
lines.append(f"Saniye başı tuş basımı (key/s): {len(pressedKeys) / passing_time}")
lines.append(f"\n")
lines.append("|".join(pressedKeys))
file.write("\n".join(lines))
# Set the function which executed on exit
atexit.register(save_to_file)
# Kill process when 'END' is clicked
def on_press(key):
global pressedKeys
char = None
try:
char = key.char
except AttributeError:
char = str(key)
pressedKeys.append(char)
time = calculate_time()
if time > TIME_LIMIT:
save_to_file(time)
def on_release(key):
print("")
if key == keyboard.Key.end:
# Stop listener
return False
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()