将文本复制到剪贴板的Python脚本
我只需要一个python脚本将文本复制到剪贴板 脚本执行后,我需要将文本的输出粘贴到另一个源。 是否可以编写一个python脚本来完成这项工作?似乎可以胜任这项任务。请参阅。示例(取自Pyperclip站点): 另外,请参见。但它似乎有更多的依赖性。在macOS上,使用管道将文本传输到将文本复制到剪贴板的Python脚本,python,clipboard,pyperclip,Python,Clipboard,Pyperclip,我只需要一个python脚本将文本复制到剪贴板 脚本执行后,我需要将文本的输出粘贴到另一个源。 是否可以编写一个python脚本来完成这项工作?似乎可以胜任这项任务。请参阅。示例(取自Pyperclip站点): 另外,请参见。但它似乎有更多的依赖性。在macOS上,使用管道将文本传输到pbcopy: import subprocess data = "hello world" subprocess.run("pbcopy", universal_newlines=True, input=dat
pbcopy
:
import subprocess
data = "hello world"
subprocess.run("pbcopy", universal_newlines=True, input=data)
它会将“hello world”复制到剪贴板。使用Tkinter:
(原作者:)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()
还有一个需要改进的答案: 和(特金特) 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()
导入系统
尝试:
从Tkinter导入Tk
除恐怖外:
#欢迎来到蟒蛇3
从tkinter导入Tk
原始输入=输入
r=Tk()
r、 撤回
r、 剪贴板_clear()
如果len(系统argv)<2:
data=sys.stdin.read()
其他:
数据=''.join(sys.argv[1:])
r、 剪贴板\u追加(数据)
如果sys.platform!='win32':
如果len(sys.argv)>1:
原始输入('数据已复制到剪贴板。粘贴并按ENTER键退出…')
其他:
#stdin已经读过了;使用GUI退出
打印('数据已复制到剪贴板。粘贴,然后关闭弹出窗口退出…')
r、 去锥化()
r、 mainloop()
其他:
r、 销毁
这展示了:
- 跨Py2和Py3导入Tk
和raw\u输入
兼容性print()
- 需要时“取消隐藏”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()
这是@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
软件包,它才能在没有模块导入错误的情况下工作。我尝试了剪贴板0.0.4,效果很好
要使用本机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!')
调用函数。这是我使用
Python 3.5.2
的唯一方法,而且它是使用标准PyData
套件最容易实现的方法
大声呼喊(我完整地抄袭了它)的答案
我为它写了一个小包装,我把它放在我的
ipython
profile中,这已经被问了很多次了。如果希望在Linux上执行此操作,请参阅:。请重新打开:链接的问题涉及Windows;这是通用的。我在我的系统上试用过。setcb不起作用,但是。copy起作用。我正在Py2.7上使用pyperclip 1.5.4。万一有人遇到同样的问题,@robert,我很想知道为什么这种语法在你的系统上有效,但在我的系统上却不起作用。复制似乎是官方的@Vincentjeng Updated如果从脚本运行后复制的文本无法保存,请参阅以获取解决方案。Python3似乎无法立即使用请注意:如果您使用的是Linux(或类似于X11的系统),则必须运行剪贴板所有者进程才能粘贴剪贴板内容。除非你有一个剪贴板管理器(如Klipper或parcellite,有几十个),这使得剪贴板窗口像(永久的)。@ChaseRoberts-哦,来吧!您只需修复从tkinter import Tk导入到。请感谢Python 3的作者们的“清理”。@TomaszGandor感谢他们的提示。我编辑了我的答案以导入错误的tkinter。您在原始答案中遗漏了一行。您需要将“r.update()”放在“r.clipboard_append()”后面。否则它将无法工作。Windows用户可以使用clip命令代替pbcopy。不适用于我-剪贴板具有相同的数据,Python 3.5.2cmd窗口将在Windows中短暂弹出。我在linux中使用xsel<代码>回显“自定义字符串”| xsel--剪贴板--输入
。pythonsubprocess.Popen(['/bin/sh','-c',f'echo“{123}”| xsel--clipboard--input'])的使用示例
这在Ubuntu 14.04 LTS上不起作用,请立即更新您的解决方案。@VickyDev-它是在Ubuntu 14.04 LTS上开发的,可以使用。请尝试sudo-apt-get-install-python-tk
,顺便说一句,这是一段很棒的代码!不用担心,它只使用pyperclip
。在()4 cmd='echo'+txt.strip()+''clip'5返回子进程中使用该函数。在copy2clip(txt)3 def copy2clip(txt):4 cmd='echo'+txt.strip()中检查调用(cmd,shell=True)-->6 copy2clip('这在我的剪贴板上!')+“|clip”-->5返回子进程。检查_调用(cmd,shell=True)。。。CalledProcessError:命令“echo这在我的剪贴板上!”|clip“返回非零退出状态127这是可行的,但在windows上,clip
是一个仅限windows的命令(有时它不是系统的一部分,您必须在WinXP上手动下载并安装它)看起来不错,但有一个额外的“\n”。一个是额外的“\n”,另一个是我在复制linux命令时遇到问题,例如,“杀死1026和杀死982”。pyperclip最终完成了这项工作。这是一个安全隐患,因为它容易受到外壳注入攻击。如果您使用QApplication.clipboard()
,则无需导入QClipboard
。这是一个非常粗糙的方法,但效果非常好。我发现它很有用。
import subprocess
def copy2clip(txt):
cmd='echo '+txt.strip()+'|clip'
return subprocess.check_call(cmd, shell=True)
import subprocess
def copy2clip(txt):
cmd='echo '+txt.strip()+'|pbcopy'
return subprocess.check_call(cmd, shell=True)
copy2clip('This is on my clipboard!')
import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)