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

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


当前回答

还有一个需要改进的答案: 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_input和print()的兼容性 “unhiding”Tk根窗口时,需要 在Linux上以两种不同的方式等待退出。

其他回答

我尝试了这个剪贴板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

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

还有一个需要改进的答案: 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_input和print()的兼容性 “unhiding”Tk根窗口时,需要 在Linux上以两种不同的方式等待退出。

在macOS上,使用subprocess.run将你的文本管道到pbcopy:

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

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

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