5

私の質問はこれに似てますが、RPyを介してRをPythonにインポートするという文脈でです。具体的には、私が実行すると

from rpy import *

私のPythonスクリプトの冒頭に、画面(または出力デバイス)にダンプされたメッセージのチャンクがあります。

Parsing output:  R version 2.13.2 (2011-09-30)
Copyright (C) 2011 The R Foundation for Statistical Computing
... ...

ここquiet_requireから実装したかったのですが、すべてのモジュールをインポートするコンテキストでどのように適合するかわかりません。

別のボックスで実行されている同じプログラムがメッセージを出力しないため、これが可能であることを私は知っています。

更新:これはPython内で解決する必要はありません。どういうわけかR側の変数を微調整して、すべての呼び出しを静かにすることができれば、それも機能します。どうすればいいのかわからない。

4

1 に答える 1

8

これは単純ですが美しくないハックです:

# define somewhere following:
import sys
import os
from contextlib import contextmanager

@contextmanager
def quiet():
    sys.stdout = sys.stderr = open(os.devnull, "w")
    try:
        yield
    finally:
        sys.stdout = sys.__stdout__
        sys.stderr = sys.__stderr__


# use it    
with quiet(): 
    # all is quiet in this scope
    import this  # just for testing
    from rpy import *  # or whatever you want
# and this will print something
import something_that_prints 

編集: @jdi および @jcollado のアドバイスに従ってコードを変更しました。

于 2011-12-19T17:30:03.693 に答える