Как сделать так, чтобы в zenity "временные родительские" предупреждения исчезли навсегда
Zenity раздражает меня, всегда отображая предупреждение в терминале:
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Видимо, я не единственный
- linuxquestions.org - Gtk сообщение gtkdialog сопоставлено без переходного родителя
- bugs.debian.org - GtkDialog отображается без временного родителя
- stackoverflow.com - GtkDialog отображается без переходного родителя
- AskUbuntu - сообщение об ошибке при запуске zenity под 16.04 Gtk-сообщением...
Почти все ответы говорят вам, чтобы изменить способ, которым вы называете zenity, добавив 2>/dev/null
до конца команды. Я не хочу делать это со всем кодом, который я уже написал, и помню это для будущего кода, который я пишу.
Есть ли более простой способ заставить это раздражающее сообщение исчезнуть?
3 ответа
Обновление 2019-05-17: OP обнаружил другое разрешение по тому же методу, представленному здесь, через глобальное перенаправление с помощью команды exec. Пожалуйста, обратитесь к дублированному сообщению для получения дополнительной информации
В принципе, нет другого пути, кроме перенаправления stderr
в /dev/null
, Основная причина в том, что Gtk требует диалоговых окон (что zenity
окна на самом деле), чтобы иметь родительское окно приложения. То же самое происходит, если вы строите диалог GUI с нуля в c или python.
Таким образом, единственный "реальный" способ заключается в том, чтобы разработчики Gtk фактически позволяли диалоговым окнам стоять самостоятельно, или разработчики zenity могли скрыть эти предупреждения из своего исходного кода. В противном случае ваш единственный вариант - постоянно добавлять 2>/dev/null
любому zenity
команда. Конечно, вы всегда можете создать псевдоним или функцию-обертку, которая сделает это за вас, что-то вроде этого:
zenity(){
/usr/bin/zenity "$@" 2>/dev/null
}
Это, однако, может иметь проблемы с цитированием и передачей аргументов, но по большей части должно работать. Если вы работаете на Python или другом языке, который на самом деле может обрабатывать Gtk, вы можете создать свои собственные всплывающие диалоги со скрытыми родительскими окнами, что достигается за счет сложности и изучения того, как создавать эти вещи. Но опять же, реальный путь был бы для zenity
разработчики фактически исправляют это или разработчики Gtk, чтобы признать необходимость автономных диалоговых окон.
Автоматически добавлять 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
приложил к нему, как и все остальные ответы наставлять.
Я предпочитаю редактировать ~/.bashrc
с:
alias zenity="zenity 2> >(grep -v 'GtkDialog' >&2)"
Это более строгое ограничение, запрещающее только предупреждающие сообщения со строкой GtkDialog, оставляя другие сообщения об ошибках или предупреждения для отображения