Python 脚本将文本复制到剪贴板[重复]
- 2025-03-04 08:25:00
- admin 原创
- 90
问题描述:
我只需要一个将文本复制到剪贴板的 Python 脚本。
脚本执行后,我需要将文本输出粘贴到另一个源。是否可以编写一个 Python 脚本来完成这项工作?
解决方案 1:
参见Pyperclip。示例(取自 Pyperclip 网站):
import pyperclip
pyperclip.copy('The text to be copied to the clipboard.')
spam = pyperclip.paste()
另请参阅Xerox。但它似乎有更多的依赖关系。
解决方案 2:
在 macOS 上,使用subprocess.run
将文本传输到pbcopy
:
import subprocess
data = "hello world"
subprocess.run("pbcopy", text=True, input=data)
它会将“hello world”复制到剪贴板。
解决方案 3:
要使用本机 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!')
调用该函数。
解决方案 4:
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()
解决方案 5:
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()
解决方案 6:
我尝试了这个剪贴板 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
解决方案 7:
还有一个需要改进的答案:
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()
兼容性在需要时“取消隐藏” Tk 根窗口
以两种不同的方式等待 Linux 上的退出。
解决方案 8:
这是@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()
您可能想要更改 clipboardText 的分配内容,在此脚本中,它被分配给调用该脚本的参数。
在全新安装的 ubuntu 16.04 中,我发现必须安装该python-gobject
包才能使其正常工作而不会出现模块导入错误。
扫码咨询,免费领取项目管理大礼包!