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


当前回答

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

import win32clipboard


def to_clipboard(txt):

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

其他回答

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

注意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()

实际上,对于这个简单的任务,pywin32和ctypes似乎是多余的。tkinter是一个跨平台的GUI框架,默认情况下与Python一起发布,并具有剪贴板访问方法和其他很酷的东西。

如果你所需要的只是将一些文本放入系统剪贴板,这将做到:

from tkinter import Tk # in Python 2, use "Tkinter" instead 
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()

仅此而已,不需要在特定于平台的第三方库上浪费时间。

如果您正在使用Python 2,请将tkinter替换为tkinter。

我在这里分享的代码片段利用了格式化文本文件的功能:如果您想将复杂的输出复制到剪贴板,该怎么办?(比如一个列中的numpy数组或一个列表)

import subprocess
import os

def cp2clip(clist):

    #create a temporary file
    fi=open("thisTextfileShouldNotExist.txt","w")

    #write in the text file the way you want your data to be
    for m in clist:
        fi.write(m+"\n")

    #close the file
    fi.close()

    #send "clip < file" to the shell
    cmd="clip < thisTextfileShouldNotExist.txt"
    w = subprocess.check_call(cmd,shell=True)

    #delete the temporary text file
    os.remove("thisTextfileShouldNotExist.txt")

    return w

只适用于windows,我猜可以适用于linux或mac。可能有点复杂……

例子:

>>>cp2clip(["ET","phone","home"])
>>>0

在任何文本编辑器中按Ctrl+V:

ET
phone
home

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

要安装这个库,请使用:

pip install pyperclip

使用示例:

import pyperclip

pyperclip.copy("your string")

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

clipboard_content = pyperclip.paste()

使用pyperclip模块

使用pip安装pyperclip。

https://pypi.org/project/pyperclip/

复制文本“Hello World!”到剪贴板

import pyperclip
pyperclip.copy('Hello World!')

你可以在任何地方使用Ctrl+V来粘贴它。

使用python粘贴复制的文本

pyperclip.paste() # This returns the copied text of type <class 'str'>