我有一个Python脚本,它使用了我的雇主提供的一些封闭式Python函数(即我无法编辑这些函数)。当我调用这些函数时,它们会将输出打印到我想要抑制的linux终端。我试过重定向stdout/stderrvia;orig_out=sys.stdoutsys.stdout=StringIO()rogue_function()sys.stdout=orig_out但这无法捕获输出。我认为我通过Python调用的函数(上面的rogue_function())实际上是编译后的C代码的包装器,它们实际上是在进行打印。有谁知道我可以通过函数(以及函数调用的任何子函数)对传递给stdout/st
我有一个Python脚本,它使用了我的雇主提供的一些封闭式Python函数(即我无法编辑这些函数)。当我调用这些函数时,它们会将输出打印到我想要抑制的linux终端。我试过重定向stdout/stderrvia;orig_out=sys.stdoutsys.stdout=StringIO()rogue_function()sys.stdout=orig_out但这无法捕获输出。我认为我通过Python调用的函数(上面的rogue_function())实际上是编译后的C代码的包装器,它们实际上是在进行打印。有谁知道我可以通过函数(以及函数调用的任何子函数)对传递给stdout/st
在Python中有没有一种方法可以在不包装如下函数调用的情况下使stdout静音?原始破码:fromsysimportstdoutfromcopyimportcopysave_stdout=copy(stdout)stdout=open('trash','w')foo()stdout=save_stdout编辑:来自AlexMartelli的更正代码importsyssave_stdout=sys.stdoutsys.stdout=open('trash','w')foo()sys.stdout=save_stdout这种方式可行,但似乎效率极低。必须有更好的方法。有什么想法吗?
在Python中有没有一种方法可以在不包装如下函数调用的情况下使stdout静音?原始破码:fromsysimportstdoutfromcopyimportcopysave_stdout=copy(stdout)stdout=open('trash','w')foo()stdout=save_stdout编辑:来自AlexMartelli的更正代码importsyssave_stdout=sys.stdoutsys.stdout=open('trash','w')foo()sys.stdout=save_stdout这种方式可行,但似乎效率极低。必须有更好的方法。有什么想法吗?
在Python2中设置默认输出编码是一个众所周知的习语:sys.stdout=codecs.getwriter("utf-8")(sys.stdout)这将sys.stdout对象包装在编解码器编写器中,该编写器以UTF-8编码输出。但是,这种技术在Python3中不起作用,因为sys.stdout.write()需要一个str,但编码的结果是bytes,当codecs尝试将编码后的字节写入原始sys.stdout时会发生错误。在Python3中执行此操作的正确方法是什么? 最佳答案 从Python3.7开始,您可以使用reconf
在Python2中设置默认输出编码是一个众所周知的习语:sys.stdout=codecs.getwriter("utf-8")(sys.stdout)这将sys.stdout对象包装在编解码器编写器中,该编写器以UTF-8编码输出。但是,这种技术在Python3中不起作用,因为sys.stdout.write()需要一个str,但编码的结果是bytes,当codecs尝试将编码后的字节写入原始sys.stdout时会发生错误。在Python3中执行此操作的正确方法是什么? 最佳答案 从Python3.7开始,您可以使用reconf
我正在尝试拦截System.out和System.err,但保持必要时直接写入原始流的能力。PrintStreamps=System.out;System.setOut(newMyMagicPrintStream());ps.println("foo");不幸的是,System类的实现细节意味着在我的示例中,“foo”被发送到MyMagicPrintStream而不是真正的stdout。有谁知道如何获取对真实/原始OutputStreams的引用?谢谢。PS:否则会导致StackOverflowError 最佳答案 试试这个:Pri
我正在尝试拦截System.out和System.err,但保持必要时直接写入原始流的能力。PrintStreamps=System.out;System.setOut(newMyMagicPrintStream());ps.println("foo");不幸的是,System类的实现细节意味着在我的示例中,“foo”被发送到MyMagicPrintStream而不是真正的stdout。有谁知道如何获取对真实/原始OutputStreams的引用?谢谢。PS:否则会导致StackOverflowError 最佳答案 试试这个:Pri
如果我通过Java的ProcessBuilder启动一个进程类,我可以完全访问该进程的标准输入、标准输出和标准错误流,如JavaInputStreams和OutputStreams。但是,我找不到将这些流无缝连接到System.in、System.out和System.err的方法。可以使用redirectErrorStream()来获取单个InputStream包含子进程的标准输出和标准错误,然后循环并通过我的标准发送它出——但我找不到一种方法来做到这一点并让用户输入进程,如果我使用Csystem()调用,他或她可以。当JavaSE7出现时,这似乎是可能的——我只是想知道现在是否有解
如果我通过Java的ProcessBuilder启动一个进程类,我可以完全访问该进程的标准输入、标准输出和标准错误流,如JavaInputStreams和OutputStreams。但是,我找不到将这些流无缝连接到System.in、System.out和System.err的方法。可以使用redirectErrorStream()来获取单个InputStream包含子进程的标准输出和标准错误,然后循环并通过我的标准发送它出——但我找不到一种方法来做到这一点并让用户输入进程,如果我使用Csystem()调用,他或她可以。当JavaSE7出现时,这似乎是可能的——我只是想知道现在是否有解