使用机器学习库PyML时,我遇到了一个恼人的问题.PyML使用libsvm来训练SVM分类器.问题是libsvm将一些文本输出到标准输出.但因为那是在Python之外我不能拦截它.我尝试使用问题中描述的方法在Python中静默函数的标准输出,而不会破坏sys.stdout并恢复每个函数调用,但这些都没有帮助.
有什么方法可以做到这一点.修改PyML不是一种选择.
打开/dev/null
写入,用于os.dup()
复制标准输出,并用于os.dup2()
将打开复制/dev/null
到标准输出.使用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)