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

这是简单但不漂亮的 hack:

# 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 回答