如何“全局”“重载”python的打印函数?

2024-04-19

我使用的是 python 2.6.6,我需要重载默认的 python 打印函数。我需要这样做,因为此代码可能在必须使用内置函数来生成输出的系统上使用,否则不会显示任何输出。

举例来说,如果你有一个像这样的 python 脚本:

from __future__ import print_function

def NewPrint(Str):
    with open("somefile.txt","a") as AFile:
        AFile.write(Str)

def OverloadPrint():
    global print
    print = NewPrint

OverloadPrint()
print("ha")

效果很好。 “重载”打印的输入位于 NewPrint 指定的文件中。

现在考虑到这一点,我希望能够运行上面的几行,并让 print 在脚本的整个执行过程中执行 NewPrint 所做的事情。现在,如果我从另一个使用 print 的模块调用一个函数,它将使用内置的 print 而不是我刚刚覆盖的那个。我猜这与命名空间和内置函数有关,但我的 python 还不够好。

Edit:

我试图保持简单,但看起来这引起了更多混乱......

  1. 重载 print 的函数将打印到 GUI,因此无需关心重定向IF该函数已超载。
  2. 我知道我的示例并没有执行打印功能实际执行的操作。一个更好的例子来说明我如何考虑编码(我知道仍然不是很好):

    def hli_print(*args, **kw):
        """
        print([object, ...], sep=' ', end='\n', file=sys.stdout)
        """
        sep = kw.get('sep', ' ')
        end = kw.get('end', '\n')
        File = kw.get('file', sys.stdout)
        args = [str(arg) for arg in args]
        string = sep.join(args) + end
        File.write(string)
        hli_Print(string)
    
  3. 从上面的 2 中您可以看到我必须用来打印到 GUI“hli_Print”的函数,它是通过 swig 包装器公开的 C++ 函数。

  4. 我们只使用标准库和我们自己的 swig 包装器,我们的开发人员也使用 print 作为函数(习惯 3.X)。所以我并不太担心其他模块调用 print 并有其他东西。

从所有评论中,我猜想只使用一些 print_() 函数而不是 print() (这是我们目前所做的)可能是最好的,但我真的很好奇,看看在 python 中是否可以做我想做的事情描述。


正如 @abarnert 的回答和几条评论所指出的,替换print可能不是一个好主意。但为了完整起见,这就是您的代码未能成功为其他模块覆盖它的原因。

The print函数定义在模块中__builtin__ http://docs.python.org/2/library/__builtin__.html(已更名为builtins在Python 3)。 Python解释器使一切都在__builtin__模块的命名空间可供其运行的所有其他代码使用,而无需将其导入到模块自己的命名空间中。太神奇了!

但是,当您创建自己的名为print (using print = NewPrint)它不会覆盖原始版本__builtin__。您只是在模块的名称空间中创建一个新变量,该变量会隐藏旧变量__builtin__. The global语句没有帮助,因为它只让你告诉Python你想要写入模块的全局命名空间,而不是函数内的某些内部命名空间。

替换默认值print函数,您需要在__builtin__模块。下面是一些执行此操作的示例代码:

from __future__ import print_function
try:
    import __builtin__ as builtins # Python 2
except ImportError:
    import builtins # Python 3

_print = print # keep a local copy of the original print
builtins.print = lambda *args, **kwargs: _print("foo:", *args, **kwargs)

再说一遍,这确实不是一个好主意。在确保我理解这个答案中所讨论的内容的同时,我设法通过替换来使我的一个 Python 会话崩溃print使用不接受的 lambda 函数filePython 用于打印到标准错误的参数。几行后,当异常处理程序在尝试打印另一个异常的回溯时遇到第二个异常时,它感到不高兴。

几乎肯定有更好的方法来获得您想要的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何“全局”“重载”python的打印函数? 的相关文章

  • MANIFEST.in、package_data 和 data_files 澄清吗?

    我正在尝试创建一个 Python 包 并且目录结构如下 mypkg init py module1 x py y py z txt module2 a py b py 然后我将所有文件添加到MANIFEST in当我检查创建的存档时 它包含
  • ca 证书 Mac OS X

    我需要在emacs 上安装offlineimap 和mu4e 问题是配置 当我运行 Offlineimap 时 我得到 OfflineIMAP 6 5 5 Licensed under the GNU GPL v2 v2 or any la
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒
  • Perl 是否有相当于 Python 的 `if __name__ == '__main__'` 的功能?

    有没有一种方法可以确定当前文件是否是 Perl 源中正在执行的文件 在 Python 中 我们使用以下结构来做到这一点 if name main This file is being executed raise NotImplemente
  • 将一维数组转换为下三角矩阵

    我想将一维数组转换为较低的零对角矩阵 同时保留所有数字 我知道numpy tril函数 但它用零替换了一些元素 我需要扩展矩阵以包含所有原始数字 例如 10 20 40 46 33 14 12 46 52 30 59 18 11 22 30
  • Django 不会以奇怪的错误“AttributeError: 'module' object has no attribute 'getargspec'”启动

    我对 Django 的内部结构有点缺乏经验 所以我现在完全陷入困境 它昨天起作用了 但我不记得我改变过任何重要的东西 当我转身时DEBUG True任何恰好位于列表中第一个的模块上都有堆栈跟踪 Traceback most recent c
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • 如何使用 PyMongo 在重复键错误后继续插入

    如果我需要在 MongoDB 中插入尚不存在的文档 db stock update one document set document upsert True 将完成这项工作 如果我错了 请随时纠正我 但是 如果我有一个文档列表并想将它们全
  • 在 iPython/pandas 中绘制多条线会生成多个图

    我试图了解 matplotlib 的状态机模型 但在尝试在单个图上绘制多条线时遇到错误 据我了解 以下代码应该生成包含两行的单个图 import pandas as pd import pandas io data as web aapl
  • 如何使用 Celery 多工作人员启用自动缩放?

    命令celery worker A proj autoscale 10 1 loglevel info启动具有自动缩放功能的工作人员 当创建多个工人时 me mypc projects x celery multi start mywork
  • Jupyter Notebook 中的深色模式绘图 - Python

    我正在使用 Jupyter Notebook 目前正在使用 JupyterThemes 的深色日光主题 我注意到我的绘图不是处于黑暗模式 并且文本仍然是黑色并且在日光照射的背景上无法读取 JupyterThemes 的自述文件建议在 ipy
  • 在seaborn中对箱线图x轴进行排序

    我的数据框round data看起来像这样 error username task path 0 0 02 n49vq14uhvy93i5uw33tf7s1ei07vngozrzlsr6q6cnh8w 39 png 1 0 10 n49vq
  • Django Rest Framework POST 更新(如果存在或创建)

    我是 DRF 的新手 我阅读了 API 文档 也许这是显而易见的 但我找不到一个方便的方法来做到这一点 我有一个Answer与 a 具有一对一关系的对象Question 在前端 我曾经使用 POST 方法来创建发送到的答案api answe
  • 在Python中连续解析文件

    我正在编写一个脚本 该脚本使用 HTTP 流量行解析文件 并取出域 目前仅将它们打印到屏幕上 我正在使用 httpry 将流量连续写入文件 这是我用来删除域名的脚本 usr bin python import re input open r
  • 在 HDF5 (PyTables) 中存储 numpy 稀疏矩阵

    我在使用 PyTables 存储 numpy csr matrix 时遇到问题 我收到此错误 TypeError objects of type csr matrix are not supported in this context so
  • Python:无法使用 os.system() 打开文件

    我正在编写一个使用该应用程序的 Python 脚本pdftk http www pdflabs com tools pdftk the pdf toolkit 几次来执行某些操作 例如 我可以在 Windows 命令行 shell 中使用
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • 如何从 nltk 下载器中删除数据/模型?

    我在 python3 NLTK 中安装了一些 NLTK 包 通过nltk download 尝试过它们 但不需要它们 现在想删除它们 我怎样才能删除例如包large grammars来自我的 NLTK 安装 我不想删除完整的 NLTK 安装
  • 在python中对列表列表执行行总和和列总和

    我想用python计算矩阵的行和和列和 但是 由于信息安全要求 我无法使用任何外部库 因此 为了创建矩阵 我使用了列表列表 如下所示 matrix 0 for x in range 5 for y in range 5 for pos in

随机推荐

  • 如何创建邮票边框?

    我希望 div 看起来像这样 但只想使用 CSS 我将如何创建这样的形状 我是否为顶部和底部创建自定义边框 你可以看看这里的代码 它完全符合你的要求 http codepen io orhanveli pen tbGJL http code
  • JavaScript 分割 URL

    我想分割 URL 的某些特定部分 这是我到目前为止所拥有的 URL 结构将如下所示 http www mydomain com page 2013 05 some page title html 变量query像
  • 将数据帧的行作为参数传递给 R 中的函数,并使用指定参数的列名称

    我想使用数据帧的行作为函数的参数 我知道这可以这样做 arg lt expand grid n 100 mean 1 1 sd 0 3 apply arg 1 FUN function x rnorm x 1 x 2 x 3 然而 我希望有
  • 使用 D3.js SVG 进行 2D 多边形布尔运算

    我有 2 个使用 D3 js 创建的简单面积图 数据和代码如下 让我们称它们为Graph A Graph B 我想用它们根据它们的相交方式创建 3 个新路径 多边形 Path 1 Graph A Graph B Path 2 Graph B
  • 我想使用条件注释使 DIV 仅出现在 IE7 或更早版本的浏览器中 如下所示 据我了解 条件注释仅在标题中起作用 这很糟糕吗 我应该使用条件注释来插入一个样式表来创建不可见的 DIVvisibility visible 是的bad http
  • 如何在运行时设置请求方向?

    我希望我的胶子应用程序能够在运行时将方向从横向更改为纵向 我检查了 Gluon Charmdown SDK 它似乎只有 getOrientation 并且没有在运行时设置方向的选项 我不想在清单中设置固定方向 Charm Down 有一个迎
  • 反转 pandas DataFrame 中的索引和列

    我有一个只有一行的 pandas DataFrame 10 20 30 70 data1 2 3 5 6 7 我想重新索引框架 以便列值 10 20 30 70 成为索引值 数据成为列 data1 10 2 3 20 5 0 30 6 0
  • 无法在 Android studio 和 Unity 中加载 libmain.so 作为库

    我的毕业项目遇到问题 我将 Unity 作为库添加到 Android Studio 中 它在我的手机上运行良好 但是当我在其他 Android 手机上尝试时 我遇到了一些奇怪的错误 无法加载libmain so 我搜索了很多 但没有找到答案
  • 在两个不同的 jQuery 类之间切换

    无法使以下代码正常工作 changeMode button click function playfield toggle function this switchClass gridView plainView function this
  • Rails 5 smtp Sendgrid 451 身份验证失败:无法进行身份验证

    我们在 Rails 5 应用程序中使用 Sendgrid 发送 SMTP 电子邮件 我遇到了一个奇怪的错误 451 身份验证失败 无法进行身份验证 我的配置在production rb文件是这样的 config action mailer
  • git 存储库有命名约定吗?

    例如 我有一个名为 购买服务 的 RESTful 服务 我应该命名我的存储库 purchaserestservice purchase rest service purchase rest service 或者是其他东西 约定是什么 在 G
  • React:未捕获类型错误:无法读取未定义的属性

    这个问题已经解决了 向下滚动或点击这里 https stackoverflow com a 73523801 19124473查看解决方案 我正在尝试使用 React 从我的服务器中提取 JSON 数据并使用两个函数渲染它 但是两个渲染函数
  • App Engine:基于环境的不同 app.yaml 文件

    我目前正在将一个应用程序迁移到 Google App Engine 该应用程序依赖于各种外部连接的环境变量 看起来 app yaml 文件是我应该设置这些配置的地方 但是如何管理这些变量可能不同的不同环境 开发 测试 登台 生产 最简单的解
  • 如何在 iPhone 中设置此布局需要一些帮助

    I have Implement Some paint like application For that the Layout is like as below 这里有一个视图和两个按钮 在我的应用程序中 我从 Button2 选择颜色
  • 使用 Angular 2 连接 Google Maps Nativescript 插件

    我正在尝试使用 Nativescript 的 Google 地图插件 https github com dapriett nativescript google maps sdk https github com dapriett nati
  • Android JNI,有什么方法C++代码可以直接读取应用程序的sqlite数据库吗?

    我正在开发一个带有 Java 组件和通过 JNI 的 C 组件的 Android 应用程序 C 组件用于其他平台 如果 C 组件可以查询现有的 SQLite 数据库 通过 SQLite C API 而无需向 Java 端进行 shell 调
  • SQL Server 根据不同标志计算累计总和/条件运行总和

    我在 SQL Server 中有一个表 其中的数据类似于此示例 ID Flag Art No Amount 1 U A1000 100 2 U B2000 5 3 V B2000 900 4 U B2000 10 5 I B2000 50
  • PHP:PDF 生成

    我目前正在一个网站上工作 基本上 当用户搜索某些内容时 我应该能够为每个搜索结果项生成 pdf 我知道 fpdf 的一种选择 有没有比 fpdf 更简单的东西或某些服务 例如如果我发送搜索结果页面的 url 它会将生成的 pdf 发送回给我
  • Lua:冒号符号、“自我”和函数定义与调用

    我对定义 调用 Lua 函数时使用的冒号表示法感到非常困惑 我以为我已经明白了 直到我看到这段代码 function string PatternSafe str return str gsub pattern escape replace
  • 如何“全局”“重载”python的打印函数?

    我使用的是 python 2 6 6 我需要重载默认的 python 打印函数 我需要这样做 因为此代码可能在必须使用内置函数来生成输出的系统上使用 否则不会显示任何输出 举例来说 如果你有一个像这样的 python 脚本 from fut