草庐IT

python - 从 python 访问备用剪贴板格式

coder 2023-08-18 原文

从支持富文本的应用程序复制到剪贴板通常会添加多种格式的文本。我需要找出可用的格式,然后以选定的格式检索剪贴板内容。以防万一,我对富文本格式(来自 Word、Acrobat、浏览器等)感兴趣,而不是图像数据或其他 exotica .

我看了又看,但我找到的解决方案仅限于纯文本,super outdated ,特定于 Windows(我在 OS X 上),reliant在命令行实用程序 pbcopypbpaste (它们不处理所有剪贴板格式)或以上几个。

那么:我怎样才能获得剪贴板中存在的格式列表,并以我选择的格式提取其内容?

平台,按兴趣排序:独立于系统(我希望)、OS X Mountain Lion(我当前的平台)或类似平台、其他平台(我计划分发我的代码)。

选定链接

pyperclip : 看起来很有趣,但在 OS X 上它委托(delegate)给 pbcopypbpaste 支持 text, rtfps 格式。

This recipe from activestate 仅适用于 Windows,但展示了如何获取 HTML。 (This SO 问题指的是它)。

This SO answer也特定于 win32clipboard。

This问题是关于将文件拖放到剪贴板(在 Windows 上)。有趣,但对我需要的没有帮助。

This tkinter-based solution很简单,仍然可以在 OS X 上运行,但它只能获取纯文本——而且我没有发现任何证据表明 tkinter 可以处理其他任何事情。

This显示用于文本放入剪贴板的几乎相同的 tkinter 代码。

编辑(2017 年 5 月)

我现在有一个适用于 OS X 的解决方案(请参阅下面的 self-answer),但如果(以及如何)pyperclip 或其他模块是否可以在 Windows 上执行相同的操作,我将不胜感激。 Pyperclip 深入研究了 Windows API,因此它离支持所有可用格式的列表和选择不远了。

最佳答案

借助模块 richxerox 在 OS X 上非常简单, 在 pypi 上可用。它需要系统支持,包括 Apple AppKitFoundation 模块。我在为 Python 3 构建 Objective C 时遇到了问题,所以最初我只让它在 Python 2 上工作。然而,Anaconda 3 预装了所有必要的部分。

这是一个打印可用剪贴板类型,然后获取并打印每个类型的演示:

import richxerox as rx

# Dump formats
verbose = True
if verbose:
        print(rx.available(neat=False, dyn=True))
    else:
        print(rx.available())

# Dump contents in all formats
for k, v in rx.pasteall(neat=False, dyn=True).items():
    line = "\n*** "+k+":  "+v
    print(line)

输出:

(
    "public.html",
    "public.utf8-plain-text"
)

*** public.html:  <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head><body><a href="http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/" 
  rel="nofollow noreferrer">pyperclip</a>: Looks interesting</body></html>

*** public.utf8-plain-text:  pyperclip: Looks interesting

要以所需的格式打印并回退到文本,您可以使用:

paste_format = "rtf"
content = rx.paste(paste_format)
if not content:
    content = rx.paste("text")

或者您可以先检查格式是否可用:

if "public.rtf" in rx.available():
    content = rx.paste("rtf")
else:
    content = rx.paste("text")

关于python - 从 python 访问备用剪贴板格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959928/

有关python - 从 python 访问备用剪贴板格式的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  6. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  7. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  8. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  9. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  10. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

随机推荐