将文本复制到剪贴板的Python脚本

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

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

看到Pyperclip。示例(摘自Pyperclip网站):

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

另外,参见施乐公司。但它似乎有更多的依赖性。

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

还有一个需要改进的答案: https://stackoverflow.com/a/4203897/2804197 < a href = " https://stackoverflow.com/a/4203897/2804197 " > < / > and 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()兼容性
  • “unhiding”Tk根窗口时,需要
  • 在Linux上以两种不同的方式等待退出。

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

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

#!/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()

你可能想要改变clipboardText被赋值的对象,在这个脚本中,它被赋值给调用脚本的参数。

在一个新的ubuntu 16.04安装中,我发现我必须安装python-gobject包才能在没有模块导入错误的情况下工作。

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

要使用本机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!')

调用函数。