[#50752] [質問] rescue節で、他パッケージのメッセージ出力を抑止したい — Takahiro Yamaguchi <yamataka@...08.itscom.net>

10 messages 2019/05/02

[ruby-list:50754] Re: [質問] rescue節で、他パッケージのメッセージ出力を抑止したい

From: Takahiro Yamaguchi <yamataka@...08.itscom.net>
Date: 2019-05-02 13:58:23 UTC
List: ruby-list #50754
坂野さん、

サポートありがとうございます。
やはり、出力を一時的に /dev/null に変更させるのですね。
大変参考になりました。サンプルコード利用させていただきます。

> 「良い」方法ではありませんが、該当箇所で一時的に STDERRの出力を抑止すれば、当座の解決にはなりましょうか。
> 

> 例えば、以下のようなメソッドを定義します。
> https://gist.github.com/bec1858c7b2555106beccd93e9cb65b2.git <https://gist.github.com/bec1858c7b2555106beccd93e9cb65b2.git>
> # @param backup_file [String] Filename to backup STDERR
> # @return [Object] Returned value of the given block
> # @yield [] Block to execute, in which STDERR is suppressed.
> def suppress_stderr(backup_file='/dev/null')
>   stderr_orig = $stderr
>   $stderr.sync
>   $stderr.reopen(backup_file, 'w')
>   yield
> ensure
>   $stderr.sync
>   $stderr = stderr_orig
> end
> これを用いて、もし該当の警告メッセージが @wait.until 実行中に出ているならば、以下のようにできます。
> 
> dialog_alert = suppress_stderr {
>   @wait.until { @driver.find_element(id: "com.aspiro.tidal:id/alertTitle").displayed? }
> }
> あるいは、begin 節全体をブロックに入れて指定することも勿論できます。
> 
> なお、提示のケースの場合、
> 「rescue節で」警告メッセージが表示されているのではなく、Exception が raise される直前、
> すなわち rescueに飛ぶ直前に、警告メッセージが表示されているのでしょう。
> 

In This Thread