我的问题类似于this one,但是在通过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
... ...
我想从here实施quiet_require
,但是在导入所有模块的上下文中看不出它是如何适合的。
我知道这是可能的,因为在另一个盒子上运行的相同程序不会输出任何消息。
更新:不必须在Python中解决。如果我能以某种方式调整R端的变量以允许所有调用都是安静的,那也是有效的。我只是不知道该怎么做。
答案 0 :(得分: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的建议更改了代码。