例如,如果一个python脚本会吐出一个字符串,该字符串给出了我将在运行脚本后立即编辑的新编写文件的路径,那么将它直接发送到系统剪贴板会非常好而不是STDOUT
。
答案 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
。我为处理这个问题创建了一个快速而又脏的函数:
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