将变量的内容复制到剪贴板

13

我正在尝试在Python脚本中自动将变量的内容复制到剪贴板。因此,创建一个包含字符串的变量,并希望将该字符串复制到剪贴板。

是否可以使用Pyclips或其他方法实现这一点?

os.system("echo '' | pbcopy")

我尝试将变量传递到应该放入字符串的位置,但这并不起作用,这对我来说很合理。

4个回答

19

你试过这个吗?

import os
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

在这里阅读更多解决方案:链接

编辑:

你可以这样调用它:

addToClipBoard(your_variable)

如果你的变量是一个字符串,你必须将它传递给函数:addToClipBoard(var) - Christian Tapia
1
我不得不将“| clip”更改为“| pbcopy”,否则它无法复制到剪贴板。这是一个错误吗,还是有原因? - Alex
1
我不是完全确定,但我认为这取决于您使用的操作系统。您使用的是Mac吗?请参见此链接:http://superuser.com/a/124282 - Christian Tapia
是的,我正在使用Mac。 - Alex
1
这是一个针对操作系统的答案,而不是Python答案。 - kontur
如果你在命令行上,使用Python调试器(pdb),单行版本可能会很方便:import os; def addToClipBoard(text): command = 'echo ' + text.strip() + '| clip'; os.system(command) - undefined

18

既然你提到了PyCLIPS,似乎第三方包在考虑范围内。让我为pyperclip提供一些建议。完整文档可以在GitHub上找到,这里是一个例子:

import pyperclip
variable = 'Some really "complex" string with\na bunch of stuff in it.'
pyperclip.copy(variable)

虽然os.system(...'| pbcopy')的例子也不错,但在处理复杂字符串时可能会遇到麻烦,而pyperclip提供了跨平台相同的API。


5

对我来说,所接受的答案不起作用,因为输出中有引号、撇号和$$符号,这些符号被解释并被shell替换了。

我基于该答案改进了函数。这个解决方案使用临时文件代替在shell中回显字符串。

def add_to_clipboard(text):
    import tempfile
    with tempfile.NamedTemporaryFile("w") as fp:
        fp.write(text)
        fp.flush()
        command = "pbcopy < {}".format(fp.name)
        os.system(command)

pbcopy替换为Windows的clip或Linux的xclip


这个答案对我来说也是最好的,因为换行会导致问题。当你尝试从打印屏幕中复制的内容太大时,这很有帮助。 - kingb12
在Linux上,将命令更改为command = "xclip -sel clip {}".format(fp.name) 对我有效。 - Michael Hall

3

对于 X11 (Unix/Linux):

os.system('echo "%s" | xsel -i' % variable)

xsel 还提供了以下三种写入方式:

  1. 主要选择(默认)

  2. 次要选择(-s选项)

  3. 剪贴板(-b选项)

如果 xsel 的表现不如预期,很可能是因为您使用了错误的选择/剪贴板。

此外,使用 -a 选项,您可以将内容追加到剪贴板而非覆盖。使用 -c,则可清空剪贴板。

改进

模块 subprocess 提供了一种更安全的实现方式:

from subprocess import Popen, PIPE
Popen(('xsel', '-i'), stdin=PIPE).communicate(variable)

1
@Huge 很好的建议。我刚刚更新了答案,展示了 subprocess,并提到了 -b 选项。 - John1024

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接