Под ubuntu 16.04 I получают следующее сообщение
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
когда я открываю zenity с командой
zenity --text-info --filename=<filename>
Этого не произошло под 14,04. Я предполагаю, что ответ связан с этим сообщением, но сообщение не объясняет, как реализовать предлагаемое решение. Кто-то мог объяснить, к какому файлу я должен добавить предложенные строки?
Вы фиксируете это предупреждение путем предоставления GtkDialog родителя, чтобы быть модальными к. Соответствующие функции являются gtk_window_set_transient_for () (который устанавливает это окно, чтобы всегда быть сверху, или переходный процесс для, другой), и дополнительно gtk_window_set_modal () для создания этого модальным диалоговым окном. Это в конечном счете, что делают различные конструкторы GtkDialog.
Игнорируют его.
Это предупреждение , не ошибка. Работы приложения, это просто не кодируется с лучшими практиками в памяти, как это кажется. Необходимо ли было бы изменить zenity
исходный код, чтобы реализовать фиксацию, описанную в связанном вопросе и затем скомпилировать его сами, но... это работает так или иначе, итак, почему необходимо обеспокоиться?
, Если Вы просто хотите избавиться от вывода в своем терминале, Вы могли бы просто перенаправить STDERR (поток стандартной погрешности, это - то, где предупреждение печатается к) к /dev/null
(виртуальное устройство посимвольного ввода-вывода, которое глотает данные) путем добавления 2> /dev/null
в конец команды, как это:
zenity --text-info --filename=<filename> 2> /dev/null
zenity ... 2>/dev/null
работы для меня. Единственная проблема, которую я вижу, состоит в том, что другие (важные) ошибочные сообщения будут также подавлены, таким образом, лучше создадут ошибочное получение так или иначе в Вашем коде
Кажется, что Gtk devs решил добавить это предупреждение, которое влияет на многие пакеты. Мы просто должны ожидать Zenity dev, чтобы нагнать и зафиксировать Zenity.
С оболочкой удара (это не Posix-совместимо) относительно просто подавить определенные сообщения об ошибках при разрешении других сообщений до stderr:
zenity --info --text "hello" 2> >(grep -v 'GtkDialog' >&2)
Это не вмешивается в stdout, так, чтобы мог передаваться по каналу или использоваться в замене команды в качестве нормального:
echo message: $(zenity --entry 2> >(grep -v 'GtkDialog' >&2) )
Основываясь на ответе Дэйва Роува , если у вас много запросов, вы можете очистить это, создав функцию, такую как
function zenityNoWarn() {
zenity "$@" 2> >(grep -v 'GtkDialog' >&2)
}
, а затем использовать ее следующим образом:
zenityNoWarn --question --text "Are you sure?"
Это упрощает чтение в сочетании с другой логикой:
if [[ `zenityNoWarn --question --text "Are you sure?"; echo $?` -eq 0 ]]; then
echo "Yes!"
else
echo "No..."
fi