我试图使一个基本的Windows应用程序构建出用户输入的字符串,然后将其添加到剪贴板。如何使用Python将字符串复制到剪贴板?


当前回答

使用stdlib解决方案,没有安全问题

下面的解决方案在Linux中工作,不需要任何额外的库,也没有在shell中执行不需要的代码的风险。

import subprocess

def to_clipboard(text: str) -> None:
    sp = subprocess.Popen(["xclip"], stdin=subprocess.PIPE, 
                                      stdout=subprocess.PIPE)
    sp.communicate(text.encode("utf8"))

注意,在Linux中有多个剪贴板,你用中鼠标(主)和另一个你用按STRG+C,STRG+V。

您可以通过添加一个选择参数来定义使用哪个剪贴板,即["xclip", "-selection", "clipboard"]。 详见man xclip。

如果您使用Windows,只需将xclip替换为clip。

这个解决方案不需要Tkinter,它没有一些Python安装(即我目前使用的自定义构建)。

其他回答

这是雾化器改进后的答案。

注意2次update()调用和它们之间200ms的延迟。它们可以保护由于剪贴板状态不稳定而冻结的应用程序:

from Tkinter import Tk
import time     

r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')

r.update()
time.sleep(.2)
r.update()

r.destroy()

如果(仅当)应用程序已经使用了Qt,您可以使用这个(优点是没有额外的第三方依赖)

from PyQt5.QtWidgets import QApplication
clipboard = QApplication.clipboard()

# get text (if there's text inside instead of e.g. file)
clipboard.text()

# set text
clipboard.setText(s)

这要求已经构造了Qt应用程序对象,因此除非应用程序已经使用了Qt,否则不应该使用它。

此外,通常情况下,在X系统(可能还有其他系统)中,除非使用parcellite或xclipboard之类的东西,否则内容只会持续到应用程序存在为止。

文档:

QGuiApplication Class | Qt GUI 5.15.6 QClipboard Class | Qt GUI 5.15.6

请参见:python - PyQT -复制文件到剪贴板-堆栈溢出

你可以试试这个:

command = 'echo content |clip'
subprocess.check_call(command, shell=True)

使用python的剪贴板库!

import clipboard as cp
cp.copy("abc")

剪贴板现在包含'abc'。粘贴快乐!

最简单的方法是用pyperclip。适用于python 2和3。

要安装这个库,请使用:

pip install pyperclip

使用示例:

import pyperclip

pyperclip.copy("your string")

如果你想获取剪贴板的内容:

clipboard_content = pyperclip.paste()