繁体   English   中英

直接将`print`的输出复制到剪贴板

[英]Copy the output of `print` to clipboard directly

我使用inspect.getsource检查我导入的库:

In[52]: from django.views.generic import View
In[53]: view_code = inspect.getsource(View)
In[54]: len(view_code)
Out[54]: 3242

检索格式化的代码

In[55]: print(view_code)

class View(object):
    """
    Intentionally simple parent class for all views. Only implements
    dispatch-by-method and simple sanity checking.
    """

    http_method_names = ['get', 'post', 'put',
                        'patch', 'delete', 'head', 'options', 'trace']

    def __init__(self, **kwargs):

我想将代码存储在笔记中,以备将来参考,
为此,我必须滚动整个代码以复制它。
如果代码足够长,这是不方便的。

如何直接将print输出复制到剪贴板?

除了作为tkinter GUI的一部分外,Python没有内置剪贴板API,但是PyPI上有许多库可以使用。

例如,使用pyperclip ,您可以将所需的任何字符串复制到剪贴板,如下所示:

In[56]: import pyperclip
In[57]: pyperclip.copy(view_code)

但是您也许可以使用tkinter 根据您的平台,无论您使用的是控制台模式会话还是qtconsole会话等,这可能都行不通,或者可能需要弹出一个不需要的窗口,但是您可以尝试看一下:

In [119]: import tkinter
In [120]: tk = tkinter.Tk()
In [121]: tk.clipboard_clear()
In [122]: tk.clipboard_append(view_code)

如果您的设置确实要求您显示一个窗口(例如,我认为这将在Windows的控制台模式会话中发生),那么您仍然可以在没有太多干扰的情况下进行操作。 如果您有兴趣请参阅J.Doe建议的答案


但是只写一个文件可能会更简单,更有用:

In[58}: with open('spam.txt', 'w') as f: f.write(view_code)

或者,由于您使用的是IPython,因此可以使用%save或其他各种魔术命令。 (请参阅此问题,因此我不必在这里全部讨论。)


或者,有多个IPython插件的第三方实现可为您提供剪贴板复制命令,例如这样的命令(我是在随机搜索中找到的,因此我不认可它或其他任何东西,但是它似乎有效):

In[61]: %clip view_code

如果实际上由于某种原因需要捕获print的输出,则两种明显的实现方法是monkeypatch或shadow print或patch sys.stdout 例如:

import builtins
import io
import sys
def print(*args, **kw):
    if kw.get('file', sys.stdout) is sys.stdout:
        buf = io.StringIO()
        builtins.print(*args, **kw, file=buf)
        pyperclip.copy(buf.getvalue())
    builtins.print(*args, **kw)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM