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

标签 python ipython

我使用 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 的输出复制到剪贴板?

最佳答案

Python 没有内置剪贴板 API,但作为 tkinter GUI 的一部分除外,但 PyPI 上有许多库提供。

例如,pyperclip ,你可以像这样复制任何你想要的字符串到剪贴板:

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

但是你可以使用tkinter。根据您的平台,无论您使用的是控制台模式还是 qtconsole session 等,这可能无法正常工作,或者可能需要弹出不需要的窗口,但您可以试试看:

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

如果您的设置确实需要您显示一个窗口(例如,我认为这将发生在 Windows 的控制台模式 session 中),您仍然可以做到这一点而不会分心.参见 this answer, suggested by J.Doe如果你有兴趣。


但是写入文件可能更简单、更有用:

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

或者,由于您使用的是 IPython,您可以使用 %save 或各种其他魔术命令。 (请参阅 this question,因此我不必在这里一一赘述。)


或者,有多个 IPython 插件的第三方实现可以为您提供剪贴板复制命令,例如 this one (我只是在随机搜索中发现的,所以我不认可它或任何东西......但它似乎有效):

In[61]: %clip view_code

如果出于某种原因你确实需要捕获 print 的输出,两种明显的方法是 monkeypatch 或 shadow print,或者修补 系统标准输出。例如:

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)

关于python - 将 `print` 的输出直接复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867670/

相关文章:

python - 如何制作碰撞 mask ?

python - 沿列而不是行的数据框 bool 选择

python - 快速 API 接受必填字段的空值

python - Ipython 并行和多核进程

configuration - 如何定义要从 IPython 提示中调用的自定义函数?

python - 无法连接 'str' 和 'instance'

python - 文件未找到错误: using Pandas

python - 从 `%timeit` ipython magic 获取平均运行时间

python - 如何在 IPython 笔记本中隐藏 <matplotlib.lines.Line2D>

python - pdb 中的 'n' 使我进入 pdb.set_trace() 方法