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


当前回答

在Windows上,你可以使用这个。没有外部依赖,也不必打开子进程:

import win32clipboard


def to_clipboard(txt):

    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(txt)
    win32clipboard.CloseClipboard()

其他回答

我的多平台解决方案基于这个问题:

import subprocess
import distutils.spawn

def clipit(text):
    if distutils.spawn.find_executable("xclip"):
        # for Linux
        subprocess.run(["xclip", "-i"], input=text.encode("utf8"))
    elif distutils.spawn.find_executable("xsel"):
        # for Linux
        subprocess.run(["xsel", "--input"], input=text.encode("utf8"))
    elif distutils.spawn.find_executable("clip"):
        # for Windows
        subprocess.run(["clip"], input=text.encode("utf8"))
    else:
        import pyperclip

        print("I use module pyperclip.")
        pyperclip.copy(text)

import wx

def ctc(text):

    if not wx.TheClipboard.IsOpened():
        wx.TheClipboard.Open()
        data = wx.TextDataObject()
        data.SetText(text)
        wx.TheClipboard.SetData(data)
    wx.TheClipboard.Close()

ctc(text)

我没有解决办法,只有一个变通办法。

Windows Vista以后有一个内置的命令,称为剪辑,它从命令行获取命令的输出,并将其放入剪贴板。例如:ipconfig | clip。

所以我用os模块做了一个函数,它接受一个字符串,并使用内置的Windows解决方案将它添加到剪贴板。

import os
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

# Example
addToClipBoard('penny lane')

# Penny Lane is now in your ears, eyes, and clipboard.

然而,正如前面的评论中所指出的,这种方法的一个缺点是echo命令会自动在文本的末尾添加换行符。为了避免这种情况,你可以使用命令的修改版本:

def addToClipBoard(text):
    command = 'echo | set /p nul=' + text.strip() + '| clip'
    os.system(command)

如果您使用的是Windows XP,只需按照从Windows XP Pro的命令提示符直接复制并粘贴到剪贴板中的步骤即可。

如果你不喜欢这个名字,你可以使用导数模块剪贴板。

注意:它只是pyperclip的选择性包装

安装完成后,导入:

import clipboard

然后你可以像这样复制:

clipboard.copy("This is copied")

你也可以粘贴复制的文本:

clipboard.paste()

可以使用pyperclip -跨平台剪贴板模块。或施乐类似的模块,除了需要win32 Python模块才能在Windows上工作。