【问题标题】:duplicate output for clipboard / pyperclip剪贴板/ pyperclip的重复输出
【发布时间】:2018-06-07 15:50:05
【问题描述】:

我想在 txt 中创建本地副本(ctrl+c)历史记录,但在输出中我不断收到重复的条目。

我的代码:

import keyboard
import win32clipboard

print('Waiting Ctrl+C\n')    

while True

    if keyboard.is_pressed('ctrl+c'):
        win32clipboard.OpenClipboard()
        data = win32clipboard.GetClipboardData()
        a = open('E:\Python\copyhistory.txt', 'a')
        a.write(data)  # text
        a.close()
        win32clipboard.CloseClipboard()
        print('printed')

输出重复很多。我也尝试了 pyperclip,但这也没有帮助。 同样的问题也存在于 pyperclip 中。

Pyperclip 示例如下:

import pyperclip
import keyboard

while True:
    if keyboard.is_pressed('ctrl+c'):
        a = pyperclip.paste()
        print(a)
代码1的

终端输出: 等待 Ctrl+C 打印 然后40行“打印”

pyperclip 也是如此,代码 2 与 pyperclip 输出了 700 多行相同的输出,应该打印一次的输出。

我在这里做错了什么,有什么想法吗?

【问题讨论】:

  • 输出对我来说很有意义。您正在循环中检查keyboard.is_pressed,并且您可能合理地期望循环每秒迭代一千次。所以如果你按住 ctrl+c 一秒钟,那么条件语句就会执行一千次。您应该查看键盘文档,看看是否有一种方法可以在响应键盘事件时只执行一次操作。
  • 我明白你的意思。谢谢@Kevin

标签: python python-3.x clipboard pyperclip


【解决方案1】:

由于 key_down 和 key_up 之间的延迟而出现此问题。这可以通过读取 key_down 或 key_up 来防止。

我试过怎么做,但对我来说是死路一条,所以我决定使用剪贴板中差异的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多