[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に飛ぶ直前に、警告メッセージが表示されているのでしょう。
>