有没有办法直接将python输出发送到剪贴板?

时间:2011-09-30 04:48:39

标签: python linux clipboard

例如,如果一个python脚本会吐出一个字符串,该字符串给出了我将在运行脚本后立即编辑的新编写文件的路径,那么将它直接发送到系统剪贴板会非常好而不是STDOUT

4 个答案:

答案 0 :(得分:25)

您可以使用外部程序xsel

from subprocess import Popen, PIPE
p = Popen(['xsel','-pi'], stdin=PIPE)
p.communicate(input='Hello, World')

使用xsel,您可以设置要处理的剪贴板。

  • -p适用于PRIMARY选项。这是中间点击一个。
  • -s适用于SECONDARY选项。我不知道这是否已经使用了。
  • -b适用于CLIPBOARD选项。那是你的Ctrl + V

详细了解X的剪贴板herehere

我为处理这个问题创建了一个快速而又脏的函数:

def paste(str, p=True, c=True):
    from subprocess import Popen, PIPE

    if p:
        p = Popen(['xsel', '-pi'], stdin=PIPE)
        p.communicate(input=str)
    if c:
        p = Popen(['xsel', '-bi'], stdin=PIPE)
        p.communicate(input=str)

paste('Hello', False)    # pastes to CLIPBOARD only
paste('Hello', c=False)  # pastes to PRIMARY only
paste('Hello')           # pastes to both

你也可以试试pyGTK的clipboard

import pygtk
pygtk.require('2.0')
import gtk

clipboard = gtk.clipboard_get()

clipboard.set_text('Hello, World')
clipboard.store()

这适用于我的Ctrl + V选项。

答案 1 :(得分:8)

这不是一个Python问题,而是一个shell问题。您已经可以将Python脚本(或任何命令)的输出发送到剪贴板而不是标准输出,方法是将Python脚本的输出传递给xclip命令。

myscript.py | xclip

如果您的系统上尚未安装xclip(默认情况下不是这样),请按照以下方式进行操作:

sudo apt-get install xclip

如果您想直接从Python脚本中执行此操作,我猜您可以使用os.system()来弹出并运行xclip命令,这很简单但已弃用。有很多方法可以做到这一点(请参阅subprocess模块了解当前的官方方式。您要执行的命令类似于:

echo -n /path/goes/here | xclip

奖励:在Mac OS X下,你可以通过管道pbcopy来做同样的事情。

答案 2 :(得分:7)

由于它是在另一个answer中发布的,如果你想在python中解决这个问题,你可以使用Pyperclip,它具有跨平台的额外好处。

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

答案 3 :(得分:2)

正如其他人所指出的,这不是“Python和电池”,因为它涉及GUI操作。所以它取决于平台。如果你在Windows上,你可以使用win32 Python模块和Access win32剪贴板操作。 我的建议是拿起一个GUI工具包(用于QT的PyQT / PySide,用于GTK +的PyGTK或用于wxWidgets的wxPython)。然后使用剪贴板操作。如果你不需要工具包的重量级东西,那么制作你的包装器,它将在Windows上使用win32包,以及其他平台上可用的任何东西,并相应地切换!

对于wxPython,这里有一些有用的链接:

http://www.wxpython.org/docs/api/wx.Clipboard-class.html

http://wiki.wxpython.org/ClipBoard

http://www.python-forum.org/pythonforum/viewtopic.php?f=1&t=25549