悄悄地进口rpy

Zha*_*g18 5 python r rpy2

我的问题类似于这个,但是在通过RPy将R导入Python的上下文中.具体来说,当我跑

from rpy import *
Run Code Online (Sandbox Code Playgroud)

在我的python脚本的开头,有一大块消息被转储到屏幕(或输出设备),从开始

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

我想quiet_require这里实现,但是没有看到它如何适合导入所有模块的上下文.

我知道这是可能的,因为在另一个盒子上运行的相同程序不会输出任何消息.

UPDATE:这并没有必须的Python内解决.如果我能以某种方式调整R端的变量以允许所有调用都是安静的,那也是有效的.我只是不知道该怎么做.

rec*_*dev 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 
Run Code Online (Sandbox Code Playgroud)

编辑:根据建议改变了代码@jdi和@jcollado.