小编典典

禁止在库外部调用模块的输出

python

使用机器学习库PyML时遇到一个烦人的问题。PyML使用libsvm来训练SVM分类器。问题是libsvm将一些文本输出到标准输出。但是因为那是在Python之外,所以我无法拦截它。我尝试使用问题Python中描述的方法使函数的标准输出静音,而不破坏sys.stdout并恢复每个函数调用,
restori)但这些方法均无济于事。

有什么办法可以做到这一点。不能修改PyML。


阅读 210

收藏
2020-12-20

共1个答案

小编典典

打开/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)
2020-12-20