有没有办法直接发送一个Python输出到剪贴板?

例如,如果一个python脚本会吐出一个string,给出一个新编写的文件的path,我将在运行该脚本之后立即编辑这个文件,将它直接发送到系统剪贴板而不是STDOUT将是非常好的。

Solutions Collecting From Web of "有没有办法直接发送一个Python输出到剪贴板?"

您可以使用外部程序xsel

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

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

  • -pPRIMARY选择一起使用。 这是中间点击一个。
  • -sSECONDARY选择一起使用。 我不知道这是否被使用了。
  • -b适用于CLIPBOARD选择。 这是你的Ctrl + V之一。

在这里和这里阅读更多关于X的剪贴板。

我创建一个快速和脏的函数来处理这个问题:

 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选择。

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

 myscript.py | xclip 

如果您的系统上尚未安装xclip (这不是默认设置),那么您将如何获得它:

 sudo apt-get install xclip 

如果你想直接从你的Python脚本来完成,我想你可以使用os.system()来运行xclip命令,这很简单,但是不推荐使用。 有很多方法可以做到这一点(请参阅当前官方的subprocess模块)。 你想要执行的命令是这样的:

 echo -n /path/goes/here | xclip 

奖金:在Mac OS X中,您可以通过管道进入pbcopy来做同样的事情。

正如它被张贴在另一个答案 ,如果你想解决在Python中,你可以使用Pyperclip ,这是跨平台的额外好处。

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

正如其他人所指出的那样,这不是“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