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

将文本复制到剪贴板的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

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

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

似乎可以胜任这项任务。

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

另外,请参见。但它似乎有更多的依赖性。

在macOS上,使用管道将文本传输到
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--剪贴板--输入
      。python
      subprocess.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)