不幸的是,这比它本应该的更复杂。我认为一些输出来自于C或Fortran编译的代码之类的东西。以下是您可以这样做的方式(在此处找到):
import os
import sys
import pandas as pd
from fbprophet import Prophet
class suppress_stdout_stderr(object):
'''
A context manager for doing a "deep suppression" of stdout and stderr in
Python, i.e. will suppress all print, even if the print originates in a
compiled C/Fortran sub-function.
This will not suppress raised exceptions, since exceptions are printed
to stderr just before a script exits, and after the context manager has
exited (at least, I think that is why it lets exceptions through).
'''
def __init__(self):
self.null_fds = [os.open(os.devnull, os.O_RDWR) for x in range(2)]
self.save_fds = (os.dup(1), os.dup(2))
def __enter__(self):
os.dup2(self.null_fds[0], 1)
os.dup2(self.null_fds[1], 2)
def __exit__(self, *_):
os.dup2(self.save_fds[0], 1)
os.dup2(self.save_fds[1], 2)
os.close(self.null_fds[0])
os.close(self.null_fds[1])
m = Prophet()
df = pd.read_csv('somefile.csv')
with suppress_stdout_stderr():
m.fit(minimal_df)
“更简单”的方法(如果它能够工作,但实际上不能)可能是这样的:
import os
import sys
import pandas as pd
from fbprophet import Prophet
m = Prophet()
df = pd.read_csv('somefile.csv')
orig_out = sys.stdout
sys.stdout = open(os.devnull, 'w')
m.fit(df)
sys.stdout = orig_out