2015-10-09 21 views
7

ライブラリを使用していますが、そのソースを編集できません。ライブラリーには、呼び出す必要のある関数があります。呼び出すと、このファイルが必要なものになります。同時に、この警告を何百回も画面に表示します。警告は常に同じです。文字列が印刷されないようにする

Warning during export : no corresponding GDSII layer found for process and purpose

これは迷惑なの一種であり、それはちょうどこの愚かな警告が殺到しますので、私は、標準出力/標準エラー出力無用に何も印刷します。

stdout/stderrを別のファイルに割り当てるだけでリダイレクトする方法を知っています。単にstdout/stderrに書き込まれるものをチェックし、それがその文字列ならばそれを破棄し、そうでなければそれを印刷することは可能ですか?私のようなものを使用することになり

+1

ライブラリを編集できない理由はありますか? – intboolstring

+0

[-W](https://docs.python.org/2/using/cmdline.html#cmdoption-W)フラグを試しましたか? – sam

+0

はい、私のライブラリではなく、オーナーのサーバーから実行しています。それはまたcommericialisedの過程にある。 –

答えて

8

...

3.xの

import sys 
from _io import TextIOWrapper 

class StdoutFilter(TextIOWrapper): 

    def __init__(self, stdout): 
     super().__init__(stdout) 
     self.stdout = stdout 

    def write(self, output): 
     if output != "don't write this": 
      self.stdout.write(output) 

sys.stdout = StdoutFilter(sys.stdout) 

print("hello, world!") 
print("don't write this") 

sys.stdout = sys.__stdout__ 

2.xの

from StringIO import StringIO 

class StdoutFilter(StringIO): 

    def __init__(self, stdout): 
     StringIO.__init__(self, stdout) 
     self.stdout = stdout 

はそれが役に立てば幸い!

+0

ありがとう、確かに助けになる! Python 2.7で動作するのに奇妙な問題があるようです。私は 'super().__ init __(stdout)'で 'attribute error:readable'というエラーを受け取ります。なぜどんなアイデア? Google検索ではそれほど多くのことは明らかにされていないようだ。 –

+1

@ Jean-Luc大歓迎です。 2.xバージョンのアップデートを参照してください! – cdonts

関連する問題