我的问题类似于这个,但是在通过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端的变量以允许所有调用都是安静的,那也是有效的.我只是不知道该怎么做.
这是简单但不美丽的黑客:
# 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.