2017-05-28 6 views
0

私はPython2.7を使用しています。私はこの機能を望んでいます:contextlib.redirect_stdout。 私は、特定の機能(すべてのプログラムではない)の出力をリダイレクトしたいと思います。 問題は - Python3だけが "context.redirect_stdout"をサポートし、Python2.7はサポートしていません。contextlib.redirect_stdout in Python2.7

誰かがPython2.7で同じ機能を使用したり、同じアイデアを実装する方法を知っていますか?あなたが同じコンテキストマネージャオブジェクトを再使用して心配していないのであれば、事前に

おかげで、このような

+0

https://contextlib2.readthedocs.io/en/stable/ – user1685095

答えて

0

何かが仕事をする必要があります。

import sys 
import contextlib 

@contextlib.contextmanager 
def redirect_stdout(target): 
    original = sys.stdout 
    sys.stdout = target 
    yield 
    sys.stdout = original 
+0

、それはすべてのプログラムsdtoutを変更しますか?同じプロセス内にいくつかのスレッドがあるので です。 – Matan

+0

Python 3の 'contextlib'から' redirect_stdout'と多かれ少なかれ同じことをします。そのdocsはスレッド化されたアプリケーションには適さないと言います(https:// docs .python.org/3/library/contextlib.html?highlight = contextlib.redirect_stdout#contextlib.redirect_stdout)。私はそれをテストしていませんが、すべてのスレッドに対して 'stdout'をグローバルにリダイレクトする必要があります。私は現在のスレッドでのみリダイレクトする方法は知らない。 – elcr