在Linux中,很多程序都有CLI版本和GUI前端。我在某个地方读到,这遵循linux的哲学,是很好的实践。当然,从开发人员的角度来看,将GUI代码与实际程序分开是正确的。
给定一个可以从命令行愉快地使用的程序,我希望为命令行版本创建一个GUI。我在这里有什么选择?
我只能想到GUI开发人员将使用的2种。
在我看来,最干净的解决方案是第二个解决方案,但如果不更改CLI版本,这并不总是可能的。
实际的问题是,将cli版本和GUI版本分开构建的正确方法是什么?
发布于 2013-02-19 00:04:31
另一种方法是将您的功能编写为库。然后,您有一个GUI,它使用这个库;一个CLI,它也使用这个库。取决于任务的复杂性,这可能是最好的解决方案,因为这两个程序可以独立工作,而不需要任何类型的进程间通信。
发布于 2013-02-19 00:41:02
如果程序的执行是相对无状态的,或者它不是交互式的,或者它通常只是运行到完成,那么第一个选项是最简单和最合适的。
如果程序是有状态的,或者是长时间运行的,那么第二个选项是最合适的,尽管比较复杂。
想想FTP:使用curl或wget编写下载脚本,而使用expect编写交互式ftp会话脚本,可能并不是每种情况都有正确的答案。
有趣的研究案例包括:
nmap可以用XML提供其所有复杂的有用输出,扫描过程中提供反馈,一旦启动,您就只能坐等gpg与GUI电子邮件客户端有着悠久的集成历史,它使用文件描述符进行输入和输出。xmlclitools有有趣的双模式操作,独立和客户机/服务器。发布于 2013-02-18 23:43:25
您计划为GUI使用哪种语言?基于system()调用猜C/C++。您还可以在许多其他语言中使用Python的os.exec*()或os.system()函数或类似的函数,包括调用泽尼蒂、亚德或GTKDialog进行GUI交互的另一个shell脚本。
使用C/C++系统()函数有一些注意事项。由于大多数其他语言编译器和解释器都是用C/C++编写的,因此它们的等效函数/方法通常具有相同的问题。请谨慎使用。
小狗Linux社区广泛使用GTKDialog是从bash脚本调用的,因为它支持大多数常见的GTK+ GUI小部件。类似XML的GTKDialog代码嵌入到exported shell脚本字符串中,该脚本字符串在调用gtkdialog可执行文件时传递。因此,所有代码都保存在同一个文件中。
亚德是泽尼蒂的一个分支,它极大地增加了泽尼蒂 GTK+ GUI功能,并且是我目前首选的工具。
交互式GUI和功能代码也可以在同一个脚本中,如果需要,可以使用命令行选项来选择GUI、CLI或API (非交互式)。更好的方法是内部检测启动环境的类型,并自动选择合适的接口。
https://unix.stackexchange.com/questions/65244
复制相似问题