python - 将`print`的输出直接复制到剪贴板
问题描述
我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 会话等,这可能无法正常工作,或者可能需要弹出不需要的窗口,但您可以尝试并查看:
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 或 shadowprint
或进行 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)
推荐阅读
- c# - playerprefs 阻止了我的值在一段时间后更新。在使用 playerpref 之前它正在更新。C# 统一
- java - 如何从 jar 中使用 Spring Boot 运行 Vaadin 14 应用程序?
- angular - 当ngOnDestroy在角度时如何停止等待函数进程
- python - 使用 python 移动 CSV 文件中的数据,但有一些限制
- c++ - Qt:要么信号不会发送,要么插槽没有被调用
- python - 如何在 CSV 标头之前读取带有文本的文件?
- azure-active-directory - 如何获取 Microsoft 帐户的个人资料图片
- java - Siddhi App > Cassandra 扩展:在模块路径或类路径上找不到 JAXB-API 的实现
- opencv - 想从图像中的二维点找到平面透视世界中的旋转和位置
- javascript - 将日期字符串转换为日期对象