web-dev-qa-db-ja.com

Zenityの「一時的な親」警告を永久に消す方法

Zenityは、ターミナルに常に警告を表示することで悩まされます。

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

どうやら私だけではありません:

ほとんどすべての答えは、コマンドの最後に2>/dev/nullを追加することで、zenityを呼び出す方法を変更するように指示しています。すでに書いたすべてのコードに対してこれを行いたくはありませんし、今後書くコードのためにこれを覚えておいてください。

この迷惑なメッセージを簡単に消す方法はありますか?

5

更新2019-05-17:OPは、execコマンドを使用したグローバルリダイレクトを介して、ここに示されているのと同じ方法で別の解決策を見つけました。詳細については、リンクされた重複投稿を参照してください

基本的に、stderr/dev/nullにリダイレクトする以外に方法はありません。主な理由は、Gtkが親アプリケーションウィンドウを持つためにダイアログウィンドウ(zenityウィンドウが実際に何であるか)を必要とするためです。 cまたはpythonで最初からGUIダイアログを作成する場合も、これと同じことが起こります。

したがって、唯一の「本当の」方法は、Gtk開発者が実際にダイアログウィンドウを独立させること、または善意の開発者がソースコード内からそれらの警告を黙らせることです。それ以外の場合、唯一のオプションは、2>/dev/nullzenityコマンドに常に追加することです。もちろん、これを行うエイリアスまたはラッパー関数をいつでも作成できます。

zenity(){
    /usr/bin/zenity "$@" 2>/dev/null
}

ただし、これには引用符を付けて引数を渡す際に問題が発生する場合がありますが、ほとんどの場合は機能するはずです。 PythonまたはGtkを実際に処理できる別の言語で作業している場合、隠された親ウィンドウを使用して独自のポップアップダイアログを作成することができます。しかし、繰り返しますが、実際の方法は、zenity開発者が実際にこれを修正するか、Gtk開発者がスタンドアロンのダイアログウィンドウの必要性を確認することです。

6

Zenityが呼び出されるたびに2>/dev/nullを自動的に追加します

ファイル~/.bashrcを編集して、次の行を検索します。

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

次の行を追加します。

# Add zenity alias to make the annoying terminal error message disappear forever:
# "Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged."
alias zenity="zenity 2>/dev/null"

ファイルを保存し、新しいターミナルウィンドウを開いてテストします。

zenity --info --text "Hello Zenity-Silly-Error-Free World"

出来上がり!古いコードはすべて修正されており、将来のコードでは、他のすべての回答の指示のように2>/dev/nullを追加する必要はありません。

5

私は~/.bashrcを編集することを好みます:

alias zenity="zenity 2> >(grep -v 'GtkDialog' >&2)"

これはより制限的で、GtkDialog文字列を持つ警告メッセージのみを抑制し、他のエラーまたは警告メッセージは表示されたままにします。

3
Julio N