使用机器学习库PyML时遇到一个烦人的问题。PyML使用libsvm来训练SVM分类器。问题是libsvm将一些文本输出到标准输出。但是因为那是在Python之外,所以我无法拦截它。我尝试使用问题Python中描述的方法使函数的标准输出静音,而不破坏sys.stdout并恢复每个函数调用, restori)但这些方法均无济于事。
有什么办法可以做到这一点。不能修改PyML。
打开/dev/null以进行写作,用于os.dup()复制标准输出,并用于os.dup2()将打开内容复制/dev/null到标准输出。之后os.dup2()用于将复制的标准输出复制回真实标准输出。
/dev/null
os.dup()
os.dup2()
devnull = open('/dev/null', 'w') oldstdout_fno = os.dup(sys.stdout.fileno()) os.dup2(devnull.fileno(), 1) makesomenoise() os.dup2(oldstdout_fno, 1)