【问题标题】:Web interface for command line application命令行应用程序的 Web 界面
【发布时间】:2017-12-06 16:39:09
【问题描述】:

我正在用 Ruby 开发一个应用程序。它在命令行中使用并且有很多选项,其中一些相当复杂。我想提供通过网络界面使用应用程序的能力。

所以我问的是如何做到这一点的最佳方法,或者是否有更好的方法来做到这一点。

我目前正在使用的想法是应用程序将自己分叉并使用 WEBrick 在某个 1024+ 端口上创建一个 http 服务器。然后,在父进程中,它将使用 sensible-browser 启动用户的 Web 浏览器,将浏览器发送到 localhost:port。

用户使用网络应用程序。当他们单击某个特定按钮(可能是“保存”)时,服务器将发送最终页面并自行关闭。最后一条消息将包含一条消息,告诉用户关闭浏览器。

父进程看到浏览器和服务器进程已关闭并继续使用保存到某个本地文件的信息。

所有这些听起来都相当复杂,这就是我对这个想法不感兴趣的原因。不过,我打算创建一个非常简单的界面,这意味着不需要用户学习一堆命令行参数(尽管我可能也会提供这些参数)。

我找不到任何提供基于光标的表单的 gem,这就是我考虑使用网络浏览器概念的原因。

意见?

【问题讨论】:

  • 大多数 GUI 工具包都有绑定。还有一点问题:你的用户是谁,他们运行什么系统,他们如何访问你的程序?它是如何分布的?

标签: ruby webrick


【解决方案1】:

如果我正确理解所有内容,您可能需要考虑的一件事是拆分命令行界面和基于 Web(或基于桌面 GUI)的界面。因此,例如,如果我正在创建一个计算器 CLI,您可以按照以下方式使用它

$ myscript -a 2 3

其中-a 用于“加法”函数,然后您可能有-s-d-m(减法、除法、乘法)...不是很友好必须记住普通乔用户。您可以创建一个类,例如

class Calculator
  class<<self
    def perform(operation, left_side, right_side)
      # figure out from operation what I need to do and do it or delegate it
    end
  end
end

然后你创建一个 CLI 脚本

#!/usr/bin/env ruby
require 'calculator'

# parse options, couple ways to do this, you probably already have one in mind
operation_option = ... # check for -a or -s or -d or -m
left_side_option = ...
right_side_option = ...

Calculator.perform(operation_option, left_side_option, right_side_option)

现在您还可以为其创建一个基于 Web(或基于桌面)的界面,该界面也只调用计算器类:

require 'calculator'

# read from text fields/drop downs/whatever
operation_option = ...
left_side_option = ...
right_side_option = ...

Calculator.perform(operation_option, left_side_option, right_side_option)

这种方式有点重复,但不是真的......无论哪种方式,您都需要从界面解析文本字段,而不是将它们写入 CLI 然后读取的中间文件,您只需绕过 CLI 并直接转到您要执行的代码。因此,您有 2 个(或更多)接口文件,它们只负责显示(如果适用)和从其特定接口读取,并以通用格式将数据传递给“工作马”类。

就创建第二个界面而言,Ruby 确实支持curses(我安装了一个使用该名称的 gem),但您需要自己构建表单和交互(据我所知'我知道,我从来没有寻找宝石来帮助使表单更容易在诅咒中)并且基于桌面的可能比编写基于 Web 的东西更好,根据您的描述(红宝石确实有相当数量的 GUI 宝石,但我' 从来没有使用过除诅咒之外的任何东西),但在这一点上,这一切都只是“适合你的项目的东西”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2012-05-18
    • 2010-11-23
    • 2021-06-01
    • 1970-01-01
    • 2013-02-23
    • 2012-12-24
    相关资源
    最近更新 更多