10

機械学習ライブラリPyMLを使用すると、厄介な問題が発生します。PyML はlibsvmを使用して SVM 分類器をトレーニングします。問題は、libsvm が一部のテキストを標準出力に出力することです。しかし、それは Python の外部にあるため、インターセプトできません。問題sys.stdout を破棄せずに Python の関数の標準出力をサイレンスするで説明されている方法を使用してみましたが、それらのどれも役に立ちませんでした。

これを行う方法はありますか。PyML の変更はオプションではありません。

4

4 に答える 4

11

/dev/null書き込み用に開き、stdout をコピーするために使用し、 openを stdoutにコピーするためにos.dup()使用します。コピーした stdout を実際の stdout にコピーして戻すために使用します。os.dup2()/dev/nullos.dup2()

devnull = open('/dev/null', 'w')
oldstdout_fno = os.dup(sys.stdout.fileno())
os.dup2(devnull.fileno(), 1)
makesomenoise()
os.dup2(oldstdout_fno, 1)
于 2010-11-14T17:27:10.043 に答える
0

I had the same problem and fixed it like that:

from cStringIO import StringIO

def wrapped_svm_predict(*args):
    """Run :func:`svm_predict` with no *stdout* output."""
    so, sys.stdout = sys.stdout, StringIO()
    ret = svm_predict(*args)
    sys.stdout = so
    return ret
于 2011-02-23T08:37:34.290 に答える