我使用 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/