有没有方法可以直接将Python输出发送到剪贴板?
比如说,如果一个Python脚本运行后会输出一个字符串,这个字符串是我刚写好的文件的路径,我接下来就要编辑这个文件。如果这个路径能直接发送到系统的剪贴板,而不是在屏幕上显示出来,那就太好了。
4 个回答
9
这其实不是一个关于Python的问题,而是关于命令行的问题。你可以把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
来实现同样的功能。
32
你可以使用一个外部程序,叫做 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 的剪贴板的信息,可以点击 这里 和 这里。
我创建了一个简单的函数来处理这个:
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
的选择。