当前位置: 首页 > 面试题库 >

如何在Python中重定向stderr?

上官羽
2023-03-14
问题内容

我想记录Python脚本的所有输出。我试过了:

import sys

log = []

class writer(object):
    def write(self, data):
        log.append(data)

sys.stdout = writer()
sys.stderr = writer()

现在,如果我“打印’某物’”,它将被记录下来。但是,如果我出现一些语法错误,例如说“ print’something#”,它将不会被记录-它会进入控制台。

如何从Python解释器中捕获错误?

我在这里看到了可能的解决方案:

http://www.velocityreviews.com/forums/showpost.php?p=1868822&postcount=3

但是第二个示例登录到/ dev / null-这不是我想要的。我想将其登录到类似上面的示例或StringIO之类的列表中。

另外,最好不要创建子进程(并在单独的线程中读取其stdout和stderr)。


问题答案:

在Python代码中,您无法做任何事情来捕获相同代码的编译过程中的错误。怎么可能
如果编译器无法完成代码的编译,它将无法运行该代码,因此您的重定向甚至尚未生效。

这就是您(不需要的)子进程的所在。您可以编写重定向标准输出的Python代码,然后调用Python解释器来编译其他代码。



 类似资料:
  • 问题内容: 我从一个需要标准输入重定向的Python项目开始,使用类似于以下的代码: 问题是,代码运行后,将显示以下内容: 输入内容:您输入的内容:Hello 有没有办法修改我的代码,以便显示以下内容? 输入内容:您好 您输入了:您好 我一直在搜寻高低,但尚未找到答案。如果有人有主意,我将不胜感激。谢谢! 问题答案: 我不确定为什么需要这样做,但是您可以始终这样做: 再说一次,根据需要交换自己的实

  • 如何在Falcon中进行“内部重定向”? 我设置静态路由: 而且我想将'/'重定向到'/index.html',但不是作为超文本传输协议3xx,我想在内部进行,这样就浏览器而言,路径仍然是'/'但内容是什么'/静态/index.html'的内容。

  • 我这里有一个非常奇怪的用例,我正试图为我的学生编写一些简单的程序,帮助他们学习python。为了让它工作,我在TKinter框架中嵌入了一个PyGame窗口,我需要重定向stdout以更改PyGame窗口中的某些内容。我有重定向工作,如果我重定向到一个文件,它的工作很好,但如果我试图改变文本,它不工作。我将一个字符串硬编码到PyGame文本更改代码中,这是可行的,但由于某些原因,它无法与重定向文本

  • 我想将我的url重定向到http://localhost:8080/clickbuy/product/details到http://localhost:8080/clickbuy/home。 我已经定义了header.jsp,并将其包含在所有页面中。当我从其他任何地方单击home link url时,从当前url添加/home,因此显示404错误。 如何在ModelAndView返回类型方法中使用

  • 问题内容: 我在命令行中执行的操作: 我想用python做什么: 问题答案: 更新:不鼓励使用,尽管在Python 3中仍然可用。 用途 如果你确实要使用子流程,请使用以下解决方案(大部分内容来自子流程的文档): OTOH,你可以完全避免系统调用:

  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。