217

我只需要一个将文本复制到剪贴板的 python 脚本。

脚本执行后,我需要将文本的输出粘贴到另一个源。是否可以编写一个 python 脚本来完成这项工作?

4

8 回答 8

268

请参阅Pyperclip。示例(取自 Pyperclip 网站):

import pyperclip
pyperclip.copy('The text to be copied to the clipboard.')
spam = pyperclip.paste()

另请参阅施乐。但它似乎有更多的依赖关系。

于 2012-06-16T12:35:47.417 回答
93

在 macOS 上,使用subprocess.run管道将您的文本传输到pbcopy

import subprocess 
data = "hello world"
subprocess.run("pbcopy", universal_newlines=True, input=data)

它会将“hello world”复制到剪贴板。

于 2013-06-28T18:27:58.040 回答
20

要使用本机 Python 目录,请使用:

import subprocess

def copy2clip(txt):
    cmd='echo '+txt.strip()+'|clip'
    return subprocess.check_call(cmd, shell=True)

在 Mac 上,改为:

import subprocess

def copy2clip(txt):
    cmd='echo '+txt.strip()+'|pbcopy'
    return subprocess.check_call(cmd, shell=True)

然后使用:

copy2clip('This is on my clipboard!')

调用函数。

于 2016-12-08T00:47:28.500 回答
8

PyQt5:

from PyQt5.QtWidgets import QApplication
import sys

def main():
    app = QApplication(sys.argv)
    cb = QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Copy to ClipBoard", mode=cb.Clipboard)
    # Text is now already in the clipboard, no need for further actions.
    sys.exit()

if __name__ == "__main__":
    main()
于 2015-11-09T11:00:23.653 回答
6

GTK3:

#!/usr/bin/python3

from gi.repository import Gtk, Gdk


class Hello(Gtk.Window):

    def __init__(self):
        super(Hello, self).__init__()
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text("hello world", -1)
        Gtk.main_quit()


def main():
    Hello()
    Gtk.main()

if __name__ == "__main__":
    main()
于 2015-02-25T15:29:17.503 回答
2

这是@Martin Thoma 对 GTK3 的回答的修改版本。我发现原来的解决方案导致进程永无止境,当我调用脚本时我的终端挂起。将脚本更改为以下内容为我解决了这个问题。

#!/usr/bin/python3

from gi.repository import Gtk, Gdk
import sys
from time import sleep

class Hello(Gtk.Window):

    def __init__(self):
        super(Hello, self).__init__()

        clipboardText = sys.argv[1]
        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        clipboard.set_text(clipboardText, -1)
        clipboard.store()


def main():
    Hello()



if __name__ == "__main__":
    main()

您可能想要更改分配给剪贴板文本的内容,在此脚本中,它被分配给调用脚本的参数。

在全新的 ubuntu 16.04 安装中,我发现我必须安装该python-gobject软件包才能使其正常工作而不会出现模块导入错误。

于 2016-04-25T11:34:46.967 回答
2

另一个需要改进的答案: https ://stackoverflow.com/a/4203897/2804197 和https://stackoverflow.com/a/25476462/1338797 (Tkinter)。

Tkinter 很好,因为它要么包含在 Python (Windows) 中,要么易于安装 (Linux),因此最终用户几乎不需要依赖。

在这里,我有一个“成熟”的示例,它将参数或标准输入复制到剪贴板,并且 - 当不在 Windows 上时 - 等待用户关闭应用程序:

import sys

try:
    from Tkinter import Tk
except ImportError:
    # welcome to Python3
    from tkinter import Tk
    raw_input = input

r = Tk()
r.withdraw()
r.clipboard_clear()

if len(sys.argv) < 2:
    data = sys.stdin.read()
else:
    data = ' '.join(sys.argv[1:])

r.clipboard_append(data)

if sys.platform != 'win32':
    if len(sys.argv) > 1:
        raw_input('Data was copied into clipboard. Paste and press ENTER to exit...')
    else:
        # stdin already read; use GUI to exit
        print('Data was copied into clipboard. Paste, then close popup to exit...')
        r.deiconify()
        r.mainloop()
else:
    r.destroy()

这展示了:

  • 跨 Py2 和 Py3 导入 Tk
  • raw_inputprint()兼容性
  • 在需要时“取消隐藏”Tk 根窗口
  • 以两种不同的方式在 Linux 上等待退出。
于 2015-11-04T13:35:20.743 回答
2

我试试这个剪贴板 0.0.4,它运行良好。

https://pypi.python.org/pypi/clipboard/0.0.4

import clipboard
clipboard.copy("abc")  # now the clipboard content will be string "abc"
text = clipboard.paste()  # text will have the content of clipboard
于 2016-06-28T06:34:54.210 回答