如何获取控制台中显示的文本
How to get the text that is shown in console
我的脚本使用了一个外部模块,当发生某些事情时,它会向控制台打印一些信息,我需要捕捉这个新信息被打印出来的时刻,换句话说,我需要访问当前的控制台文本并检查如果此信息已打印出来。
在网上搜索了一下后,我发现了这个:
old_stdout = sys.stdout
sys.stdout = buffer = StringIO()
# Code
buffer.getvalue()
但出于某种原因,这并没有捕获我正在使用的模块的控制台输出,它只捕获了我使用的 print
语句,有没有办法让我获取当前的控制台文本?
如果你想监控其他进程(你的外部模块)输出,那么我会从监控脚本执行这个进程,然后使用 subprocess 模块捕获它的输出。
例如,请参阅此线程:How can I capture the stdout output of a child process?
找到我的答案,显然,我正在使用的模块是用 C++ 编写的,而 sys.stdout
只是为 python 编写的,这意味着任何更改都不会影响在外部编译的模块共 python.
所以为了捕获 C++ 模块的输出,我从另一个答案中看到了这段代码:
capture = py.io.StdCaptureFD()
# ...
out, err = capture.readouterr()
按预期工作。
我的脚本使用了一个外部模块,当发生某些事情时,它会向控制台打印一些信息,我需要捕捉这个新信息被打印出来的时刻,换句话说,我需要访问当前的控制台文本并检查如果此信息已打印出来。
在网上搜索了一下后,我发现了这个:
old_stdout = sys.stdout
sys.stdout = buffer = StringIO()
# Code
buffer.getvalue()
但出于某种原因,这并没有捕获我正在使用的模块的控制台输出,它只捕获了我使用的 print
语句,有没有办法让我获取当前的控制台文本?
如果你想监控其他进程(你的外部模块)输出,那么我会从监控脚本执行这个进程,然后使用 subprocess 模块捕获它的输出。
例如,请参阅此线程:How can I capture the stdout output of a child process?
找到我的答案,显然,我正在使用的模块是用 C++ 编写的,而 sys.stdout
只是为 python 编写的,这意味着任何更改都不会影响在外部编译的模块共 python.
所以为了捕获 C++ 模块的输出,我从另一个答案中看到了这段代码:
capture = py.io.StdCaptureFD()
# ...
out, err = capture.readouterr()
按预期工作。