Gol*_*ngs 6 python command-line bash scripts
在具有循环变量等的bash shell 脚本(单个文件)中是否有可能在其他程序中执行zenity以删除 zenity 并添加 GTK 函数?
如果是,那么是否还可以将 bash 命令、变量、循环(从 bash shell 脚本复制)添加到qt4 设计器?
我要问的是,GTK 函数是否有可能与bash shell 脚本中的 bash 命令或什至与 qt4 设计器的 bash 命令结合使用。
我想摆脱 zenity(或 yad、kdialog),因为它非常限于更高级的 Windows,并且仍然使用 bash shell 脚本中已有的所有其余 bash 函数,这可能吗?
mur*_*uru 11
Python 中没有 GTK+ 函数那样的“GTK 命令”。GTK+ 是一个具有多种语言绑定的库,但它提供的功能没有可执行命令。您可以尝试通过一些外部命令执行 GTK+ API 可以执行的部分操作:
但是绝大多数 GTK+ 功能无法通过命令访问。
根据 POSIX 定义,Shell 只是命令解释器。Gtk 是一个库,旨在以实际的编程语言导入。所以答案是否定的,你不能在 shell 脚本中使用成熟的 Gtk 东西,只能使用yad
和zenity
允许的有限的东西。
但是你可以使用Python。它是一种脚本语言,但比 shell 更适合系统和编程。您可以调用存储在类似/bin
或/usr/bin
通过 Python 中的 subprocess 模块的地方的命令。我已经为我的 Gtk 应用程序做过很多次了。
例如,这是我用于从 Python 脚本调用外部命令的标准函数:
def run_cmd(self, cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError:
pass
else:
if stdout:
return stdout
Run Code Online (Sandbox Code Playgroud)
这是一个在我的示例中使用它xrandr-indicator
从 Ubuntu 的顶部面板切换屏幕分辨率的示例;顾名思义,它xrandr
在幕后调用:
self.run_cmd(['xrandr','--output',out,'--mode',mode])
Run Code Online (Sandbox Code Playgroud)
至于 shell,您需要使用 -c 参数调用 shell。所以这样的事情可以工作:
subprocess.Popen(['bash','-c', 'echo hello world'])
Run Code Online (Sandbox Code Playgroud)
或者,考虑实现进程间通信。在 python 中制作 GUI,但让它通过命名管道或文件与 shell 脚本通信。