可以将python发送到Mac剪贴板

时间:2009-12-01 11:51:50

标签: python macos clipboard

我希望我的python程序在Mac剪贴板中放置一些文本。

这可能吗?

7 个答案:

答案 0 :(得分:62)

如何将Unicode字符串写入Mac剪贴板:

import subprocess

def write_to_clipboard(output):
    process = subprocess.Popen(
        'pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
    process.communicate(output.encode('utf-8'))

如何从Mac剪贴板中读取Unicode字符串:

import subprocess

def read_from_clipboard():
    return subprocess.check_output(
        'pbpaste', env={'LANG': 'en_US.UTF-8'}).decode('utf-8')

适用于Python 2.7和Python 3.4。

答案 1 :(得分:15)

以下代码使用PyObjC(http://pyobjc.sourceforge.net/

from AppKit import NSPasteboard, NSArray

pb = NSPasteboard.generalPasteboard()
pb.clearContents()
a = NSArray.arrayWithObject_("hello world")
pb.writeObjects_(a)

作为explained in Cocoa documentation,复制需要三个步骤:

  • 获取粘贴板
  • 清除它
  • 填写

用一个对象数组填充粘贴板(这里a只包含一个字符串)。

答案 2 :(得分:14)

一种简单的方法:

cmd = 'echo %s | tr -d "\n" | pbcopy' % str
os.system(cmd)

跨平台方式:
https://stackoverflow.com/a/4203897/805627

from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.destroy()

答案 3 :(得分:7)

新答案:

This page建议:

  

所有Mac OS X的实施   版本

     

另一个Mac模块   (清单4中的MacSharedClipboard.py)   实现剪贴板界面   两个命令行程序的顶部   叫做pbcopy(将文本复制到   剪贴板)和pbpaste(其中   粘贴任何文本   剪贴板)。前缀“pb”代表   “粘贴板”,Mac术语   剪贴板。

旧回答:

显然是这样:

http://code.activestate.com/recipes/410615/

是一个简单的脚本,演示了如何操作。

编辑:刚刚意识到这依赖于Carbon,所以可能并不理想......取决于你使用它的一点点。

答案 4 :(得分:5)

我知道这是一篇较老的帖子,但我找到了解决这个问题的非常优雅的方法。

有一个名为 PyClip 的库,可以在https://github.com/georgefs/pyclip-copycat找到。

语法非常简单(来自Github repo的例子):

import clipboard

# copy some text to the clipboard
clipboard.copy('blah blah blah')

# get the text currently held in the clipboard
text = clipboard.paste()

一旦您通过clipboard.copy('foo'),您就可以 cmd + v 来获取文字

答案 5 :(得分:1)

如果您只想将文本放入mac剪贴板,可以使用shell的pbcopy命令。

答案 6 :(得分:0)

基于@David Foster的回答,我实现了一个简单的脚本(仅适用于Mac)将python dict(实际上是从JSON字符串解析)解码为JSON字符串,因为有时在调试时,我需要找到数据中的错误(并且数据主体非常大且复杂,很难被人阅读),然后将其粘贴到python shell和json.dumps(data)中,然后复制到VS代码中,以整理JSON 。因此,下面的脚本对我的作品非常有帮助。

alias pyjson_decode_stdout='python3 -c "import sys, json, subprocess; \
    print(json.dumps(eval(subprocess.check_output( \
        \"pbpaste\", env={\"LANG\": \"en_US.UTF-8\"}).decode(\"utf-8\"))))"'
alias pyjson_decode='python3 -c "import json, subprocess; \
    output=json.dumps(eval(subprocess.check_output(\
        \"pbpaste\", env={\"LANG\": \"en_US.UTF-8\"}).decode(\"utf-8\"))).encode(\"utf-8\"); \
    process=subprocess.Popen(\"pbcopy\", env={\"LANG\": \"en_US.UTF-8\"}, stdin=subprocess.PIPE); \
    process.communicate(output)"'

将脚本添加到~/.zshrc~/.bashrc(基于您使用的sh)并新建一个终端窗口,示例用法是复制一个dict数据,例如{'a': 1}并输入pyjson_decode_stdout将基于此字典打印已解析的json;复制并输入pyjson_decode会将此字符串写入pbcopy