Win*_*nix 6 command-line bash gtk zenity redirect
Zenity 总是在终端中显示警告让我很恼火:
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Run Code Online (Sandbox Code Playgroud)
显然我不是唯一一个:
几乎所有的答案都告诉您通过附加2>/dev/null到命令的末尾来改变调用 zenity 的方式。我不想对我已经编写的所有代码执行此操作,也不想在以后编写的代码中记住这一点。
有没有更简单的方法让这条烦人的消息消失?
2>/dev/null每次调用zenity时自动添加编辑文件~/.bashrc并搜索以下行:
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
Run Code Online (Sandbox Code Playgroud)
在后面添加以下几行:
# 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"
Run Code Online (Sandbox Code Playgroud)
保存文件并打开一个新的终端窗口进行测试:
zenity --info --text "Hello Zenity-Silly-Error-Free World"
Run Code Online (Sandbox Code Playgroud)
瞧!你所有的旧代码都是固定的,未来的代码不需要2>/dev/null像所有其他答案一样附加到它上面。
2019 年 5 月 17 日更新:OP 使用 exec 命令通过全局重定向找到了另一种解决方法,该方法与此处介绍的方法相同。请参阅链接的重复帖子以获取更多信息
基本上,除了重定向stderr到/dev/null. 主要原因是因为 Gtk 需要对话窗口(zenity实际上就是窗口)来拥有父应用程序窗口。如果您在 c 或 python 中从头开始构建 GUI 对话框,也会发生同样的事情。
因此,唯一“真正”的方法是让 Gtk 开发人员真正允许对话框窗口独立存在,或者 zenity 开发人员从他们的源代码中消除这些警告。否则,您唯一的选择就是不断添加2>/dev/null到任何zenity命令中。当然,您始终可以创建一个别名或包装器函数来为您执行此操作,大致如下:
zenity(){
/usr/bin/zenity "$@" 2>/dev/null
}
Run Code Online (Sandbox Code Playgroud)
然而,这可能在引用和传递参数方面存在问题,但在大多数情况下应该有效。如果您使用 Python 或其他可以实际处理 Gtk 的语言工作,您可以使用隐藏的父窗口创建自己的弹出对话框,这是以复杂性和学习如何创建这些东西为代价的。但同样,真正的方法是让zenity开发人员真正解决这个问题,或者 Gtk 开发人员承认需要独立的对话框窗口。
| 归档时间: |
|
| 查看次数: |
5289 次 |
| 最近记录: |