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

nye*_*e17 18 python linux clipboard

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

Nul*_*ion 28

您可以使用外部程序xsel:

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

使用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
Run Code Online (Sandbox Code Playgroud)

你也可以试试pyGTK clipboard:

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

clipboard = gtk.clipboard_get()

clipboard.set_text('Hello, World')
clipboard.store()
Run Code Online (Sandbox Code Playgroud)

这适用Ctrl + V于我的选择.


kin*_*all 8

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

myscript.py | xclip
Run Code Online (Sandbox Code Playgroud)

如果xclip您的系统上尚未安装(默认情况下不是这样),那么您就是这样做的:

sudo apt-get install xclip
Run Code Online (Sandbox Code Playgroud)

如果您想直接从Python脚本中执行此操作,我想您可以使用os.system()简单但不推荐使用的shell来运行xclip命令.有很多方法可以做到这一点(参见subprocess当前官方方式的模块).您要执行的命令如下:

echo -n /path/goes/here | xclip
Run Code Online (Sandbox Code Playgroud)

额外奖励:在Mac OS X下,您可以通过管道输入来做同样的事情pbcopy.


Mar*_*rda 7

正如它在另一个答案中发布的那样,如果你想在python中解决这个问题,你可以使用Pyperclip,它具有跨平台的额外好处.

>>> import pyperclip
>>> pyperclip.copy('The text to be copied to the clipboard.')
>>> pyperclip.paste()
'The text to be copied to the clipboard.'
Run Code Online (Sandbox Code Playgroud)