Быстрое развитие GUI для командной строки

Я ищу программное обеспечение, которое поможет мне быстро создать графический интерфейс (например, HTML-страницы). При выборе другой опции из графического интерфейса (например, HTML-формы) эти параметры волшебным образом превратятся в параметры командной строки. Например: мой графический интерфейс позволит мне выбрать:

  • Выберите имя входного файла: inputfn
  • Выберите имя выходного файла: outputfn
  • Установите опцию 1 в положение ВКЛ
  • Установите Option2 в положение OFF
  • Установите Option3 в значение "42"
  • ...

При нажатии "Отправить" этот пользовательский ввод превратится в нечто вроде:

$ cmd_line --input $inputfn --output $outputfn --option1-on --option2-off --option3=42

Я предполагаю, что мне нужно будет написать простой файл конфигурации XML (YAML?), чтобы описать простую компоновку и специфику командной строки (переключатель, текстовые поля...).

Мне снится или есть что-то подобное?

Ответ 1

Этот пост, кажется, спрашивает почти точно, что вы хотите.

Верхнее решение, использующее YAD, похоже, покрывает ваши реквизиты.

Например, следующий один вкладыш:

data="$(yad --title="Desktop entry editor" --text="Simple desktop entry editor" --form --field="Type:CB" --field="Name" --field="Generic name" --field="Comment" --field="Command:FL" --field="Icon" --field="In terminal:CHK" --field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE --button="WebUpd8:2" --button="gtk-ok:0" --button="gtk-cancel:1")"

создает диалог, содержащий:

  • текстовые поля
  • выпадающий список
  • флажков
  • Кнопки

выглядит следующим образом:

enter image description here

Все выходные данные выводятся на yad stdout, а echo "$data" выглядит примерно так:

Application|Name|Generic name|This is the comment|/usr/bin/yad|yad|FALSE|TRUE|

Теперь вы можете "разобрать" вывод с помощью некоторого инструмента cmdline, такого как cut или awk:

a="$(echo "$data" | cut -d"|" -f1)"
b="$(echo "$data" | cut -d"|" -f1)"

Тогда вам остается только логика приложения.

Установка Ubuntu:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad

EDIT: фокусировка на преобразовании графического интерфейса в параметры командной строки

После получения нисходящего хода я думаю, что я неправильно интерпретировал ответ. Ключевым моментом, который он хочет, является преобразование интерфейса GUI в cmdline.

Я не знаю о существующем решении, и поскольку после 7 щедрого дня все еще нет ответа, мы можем предположить, что существующего решения нет.

Поэтому лучшее, что мы можем сделать, это помочь OP создать решение самостоятельно. Я считаю, что, поскольку в этом случае не так много вариантов командной строки, достаточно малой script.

Здесь приведен пример Python + Tk

#!/usr/bin/env python

import Tkinter
import tkFileDialog

class Option(object):
    def __init__(self, optype, name, widget=Tkinter.Entry):
        self.optype = optype
        self.name = name
        if self.optype == 'switch':
            self.widget = Tkinter.Checkbutton
        else:
            self.widget = widget

## INPUT -------------------------------------------------------
options = [
    Option("key-value", "--text="),
    Option("switch", "-s"),
    Option("positional", "pos0"),
    Option("positional", "pos1", tkFileDialog.askopenfilename),
]
## END -------------------------------------------------------

def askopenfilename(filename):
    filename.set(tkFileDialog.askopenfilename())

# Build command
def ok_func():
    cmd = "cmd_line"
    for option in options:
        if option.optype == "key-value":
            val = tkvars[option.name].get()
            if val:
                cmd += ' '
                cmd += '%s"%s"' % (option.name, val)
        elif option.optype == "switch":
            cmd += ' '
            if tkvars[option.name].get() == 1:
                cmd += option.name
        elif option.optype == "positional":
            val = tkvars[option.name].get()
            if val:
                cmd += ' '
                cmd += val
    print cmd


tkvars = {}
app = Tkinter.Tk()
grid = Tkinter.Frame()
row = 0

# Build GUI
for option in options:
    Tkinter.Label(grid, text=option.name).grid(row=row, column=0, sticky='W')
    if option.widget == Tkinter.Entry:
        tkvars[option.name] = Tkinter.StringVar()
        widget = Tkinter.Entry(
            grid,
            textvariable=tkvars[option.name]
        )
    elif option.widget == Tkinter.Checkbutton:
        tkvars[option.name] = Tkinter.IntVar()
        widget = Tkinter.Checkbutton(
            grid,
            variable = tkvars[option.name],
            onvalue = 1
        )
    elif option.widget == tkFileDialog.askopenfilename:
        tkvars[option.name] = Tkinter.StringVar()
        widget = Tkinter.Button(
            grid,
            text='Browse',
            command=lambda: askopenfilename(tkvars[option.name])
        )
    widget.grid(row=row, column=1, sticky='W')
    row += 1

grid.pack()
Tkinter.Button(app, text="ok", command=ok_func).pack()
Tkinter.Button(app, text="quit", command=app.quit).pack()
app.mainloop()

Чтобы запустить Ubuntu 12.04, выполните следующие действия:

sudo apt-get install python-tk

Скриншот:

enter image description here

Команда, созданная для скриншота:

cmd_line --text="asdf" -s qwer /path/to/file

Поведение:

  • если значение --text= пустое, оно опущено
  • переключатели появляются, только если установлен соответствующий флажок.

Если вы хотите реализовать новую функцию поверх этого кода, я рекомендую вам сделать это здесь. Если он становится достаточно хорошим, давайте разделим его на новое репо и сделаем его возможным.