有没有方法可以直接将Python输出发送到剪贴板?

26 投票
4 回答
32071 浏览
提问于 2025-04-17 03:24

比如说,如果一个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来实现同样的功能。

17

正如在另一个回答中提到的,如果你想在Python中解决这个问题,可以使用Pyperclip。这个工具的好处是它可以在不同的操作系统上使用。

>>> import pyperclip
>>> pyperclip.copy('The text to be copied to the clipboard.')
>>> pyperclip.paste()
'The text to be copied to the clipboard.'
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 的选择。

撰写回答