首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持程序GUI前端和CLI功能分开

问保持程序GUI前端和CLI功能分开
EN

Unix & Linux用户
提问于 2013-02-18 21:52:34
回答 3查看 2.1K关注 0票数 4

在Linux中,很多程序都有CLI版本和GUI前端。我在某个地方读到,这遵循linux的哲学,是很好的实践。当然,从开发人员的角度来看,将GUI代码与实际程序分开是正确的。

给定一个可以从命令行愉快地使用的程序,我希望为命令行版本创建一个GUI。我在这里有什么选择?

我只能想到GUI开发人员将使用的2种。

  • 用配置好的参数调用程序,如:system(“某某程序-参数1 -p2 -p3")
  • 拥有CLI版本可以使用套接字在服务器模式下运行(unix,inet,.)并使用这些套接字与“服务器”进行通信。

在我看来,最干净的解决方案是第二个解决方案,但如果不更改CLI版本,这并不总是可能的。

实际的问题是,将cli版本和GUI版本分开构建的正确方法是什么?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2013-02-19 00:04:31

另一种方法是将您的功能编写为库。然后,您有一个GUI,它使用这个库;一个CLI,它也使用这个库。取决于任务的复杂性,这可能是最好的解决方案,因为这两个程序可以独立工作,而不需要任何类型的进程间通信。

票数 7
EN

Unix & Linux用户

发布于 2013-02-19 00:41:02

如果程序的执行是相对无状态的,或者它不是交互式的,或者它通常只是运行到完成,那么第一个选项是最简单和最合适的。

如果程序是有状态的,或者是长时间运行的,那么第二个选项是最合适的,尽管比较复杂。

想想FTP:使用curl或wget编写下载脚本,而使用expect编写交互式ftp会话脚本,可能并不是每种情况都有正确的答案。

有趣的研究案例包括:

  • nmap可以用XML提供其所有复杂的有用输出,扫描过程中提供反馈,一旦启动,您就只能坐等
  • 作为一个CLI,gpg与GUI电子邮件客户端有着悠久的集成历史,它使用文件描述符进行输入和输出。
  • xmlclitools有有趣的双模式操作,独立和客户机/服务器。
票数 3
EN

Unix & Linux用户

发布于 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功能,并且是我目前首选的工具。

GTKDialog、泽尼蒂和亚德的一般方法是:

  • 编写一个shell脚本,以交互方式收集参数,调用一个或多个GTKDialog、泽尼蒂或亚德 (或任何或全部调用)
  • 使用收集的参数执行命令行程序

交互式GUI和功能代码也可以在同一个脚本中,如果需要,可以使用命令行选项来选择GUI、CLI或API (非交互式)。更好的方法是内部检测启动环境的类型,并自动选择合适的接口。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/65244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档