Home > Net >  How to save stdout instead of printing directly on console?
How to save stdout instead of printing directly on console?

Time:08-01

When I call some third party library and there may be some stdout from it. For example pd.read_sql, and there may be output like

2022-08-01 17:15:47,216 INFO sqlalchemy.engine.Engine SHOW VARIABLES LIKE 'sql_mode'

2022-08-01 17:15:47,217 INFO sqlalchemy.engine.Engine [raw sql] ()

2022-08-01 17:15:47,260 INFO sqlalchemy.engine.Engine SHOW VARIABLES LIKE 'lower_case_table_names'

2022-08-01 17:15:47,260 INFO sqlalchemy.engine.Engine [generated in 0.00024s] ()

2022-08-01 17:15:47,346 INFO sqlalchemy.engine.Engine SELECT DATABASE()

2022-08-01 17:15:47,346 INFO sqlalchemy.engine.Engine [raw sql] ()

2022-08-01 17:15:47,476 INFO sqlalchemy.engine.Engine SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = %s AND table_name = %s

2022-08-01 17:15:47,476 INFO sqlalchemy.engine.Engine [generated in 0.00027s] ('test', 'select * from A')

2022-08-01 17:15:47,520 INFO sqlalchemy.engine.Engine select * from A

2022-08-01 17:15:47,520 INFO sqlalchemy.engine.Engine [raw sql] ()

But I really don't want them to print directly onto console, instead I want to save them temporarily and use them when I want.

Is there a way to achieve what I want?

CodePudding user response:

How to save stdout instead of printing directly on console?

This looks like task for contextlib.redirect_stdout, simple usage example

import contextlib
import io
def printing_func():
    print("Hello World")
with contextlib.redirect_stdout(io.StringIO()) as f:
    printing_func()
s = f.getvalue()
print(s)

output

Hello World
  • Related