0
Найти на сайте: параметры поиска

 

 

libreoffice и страшный скрипт

Попытка создать кнопку для скрипта
  
Сообщений: 5
Всем добра.
Тут пытаемся рассказать или рассмотреть как правильно или кто как умеет создать кнопочку в нашем любимом libreoffice 5.1.2.2
На снимке показываю условие задачи и саму задачу с формулой. И так:
В ячейку IP вводится два числа адреса компьютера кому адресован скрипт, в папке определённого пользователя должны быть произведены некоторые исправления и копирования. Как таковой скрипт формируется соединяя определённые ячейки в нужной последовательности.
Задача:
Нужно прикрутить кнопку запуска терминала с исполнением этого итогового скрипта. (Строк с пользователями около 400 шт.)

Итого:
У кого какие идеи решения?
Прикрепленные файлы:
20160409213333_824s7.png | 186,28 Кб | Скачали: 365
Сообщений: 0
1. сам "страшный скрипт" с листа вынести в .sh изменяемые параметры пердавать аргументами, типа

Код BASH:
  1. ...user_name=$4...auth_name=$4...auth_pass=$5...root@10.102$1
и так далее, то есть осуществялть вызов этой простыни уже через
Код PHP:
  1. ./some_script.sh 192.13 RDE1 KD040188TAS 10662 LLmKxjmyvC
а в строку запуска их в свою очередь передавать из макроса питона, типа того что вчера намудрили:

Код PHP:
  1. import uno
  2. oDoc = XSCRIPTCONTEXT.getDocument()
  3.  
  4. def wonder_button():
  5. oSheet = oDoc.CurrentController.ActiveSheet
  6. ip = oSheet.getCellRangeByName("A4")
  7. branch = oSheet.getCellRangeByName("B4")
  8. ldap = oSheet.getCellRangeByName("C4")
  9. sip = oSheet.getCellRangeByName("D4")
  10. paswd = oSheet.getCellRangeByName("E4")
  11. import subprocess
  12. subprocess.check_output(["gnome-terminal","-e","./some_script",str(ip.String),str(branch.String),str(ldap.String),str(sip.String),str(paswd.String)
Вешаем на лист кнопку, на неё событие "mouse button pressed", выходим из design mode, проверяем.

И соответственно при нажатии на кнопку произойдет следующее:
1. макрос берет из заданных ему ячеек (A4-E4) значения, передает их аргументами скрипту, тот подставляет полученные аргументы в нужные места и выполняется.

если строк много, можно в макросе сделать простой цикл (for) по номеру строки в диапазоне их количества и подставлять к букве столбца.

Вопроса два.
1. почему это всё нужно делать из листа либры? почему не спарсить нужные для выполнения данные из листа снаружи, при необходимости... Т.е. Лист в рибре заполнили сохранили, затем выполняем внешний скрипт (например ярлык на рабочем столе), который на лету все расчитает и выполнит нужные директивы.
2. для чего открывать сам терминал? эмулятор терминала, если быть точным smile просто bash-комманды вполне могут выполняться и в фоне
Сообщений: 5
Chocobo, по коду PHP вообще ничего не понял а с вопросом 1: рассскажи подробнее как это сделать. Вопрос 2: открывать терминал надо для наглядности выполнения и отображения результата и возможных ошибок.
Сообщений: 0
krazen, ты так и не расписал, откуда нужные данные берутся в табличном процессоре. Также нет постановки задачи и ожидаемого результата. Попробую "пованговать" как оно видится мне:

1. данные в лист вносятся вручную оператором
2. по факту внесения этих данных нужно выполнить "простынь" команды
3. результатом получается и наличие записи в таблице и отправленная на выполнение команда.

Если все так - то налицо явно лишняя прослойка в виде получения данных из либры. Её можно и не открывать даже, по сути) На мой взгляд куда проще собрать от пользователя сырые данные и затем отправить в лист уже на запись. Можно поробовать только bash'ем, чоб не смешивать инструментарий
На вход взять простой zenity, примерно в таком виде

Код BASH:
  1. OUTPUT=$(zenity --forms --title="ВВОД" --text="ВВОД ДАННЫХ" --separator="," --add-entry="IP" --add-entry="Бранч" --add-entry="LDAP" --add-entry="SIP" --add-password="Password")
  2. accepted=$?
  3. if ((accepted != 0)); then
  4. echo "something went wrong"
  5. exit 1
  6. fi
  7.  
  8. ip=$(awk -F, '{print $1}' <<<$OUTPUT)
  9. branch=$(awk -F, '{print $2}' <<<$OUTPUT)
  10. ldap=$(awk -F, '{print $3}' <<<$OUTPUT)
  11. sip=$(awk -F, '{print $4}' <<<$OUTPUT)
  12. paswd=$(awk -F, '{print $5}' <<<$OUTPUT)
  13.  
  14. echo "...user_name=$sip...auth_name=$sip...auth_pass=$paswd...root@10.102.$ip"
получим следующий простой интерфейс для ввода:


При ОК в нем получим выхлоп последнего echo уже с введенными значениями:
...user_name=123987...auth_name=123987...auth_pass=sdfn2Jg236...root@10.102.192.10
Здесь надеюсь мысль уже понятна, что вместо echo вполне может быть твой чудо скрипт.

Осталось только вписать эти же переменные в лист. в зависмости от формата решения могут быть разными. например в ods можно просто unzipнуть его в xml:
Код BASH:
  1. unzip table.ods content.xml
и к xml-конструкции добавить table-row ветку, примерно такую:
<table:table-row table:style-name="ro1"><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>192.10</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>some_branch</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>some_ldap</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>123987</text:p></table:table-cell><table:table-cell office:value-type="string" calcext:value-type="string"><text:p>sdfn2Jg236</text:p></table:table-cell></table:table-row>
и спаковать обратно:
Код BASH:
  1. zip -j table.ods content.xml
Если же, по каким-то причинам необходим именно парсинг таблицы, то для ods в баше можно пойти тем же путем:
получить xml, разбить его на <table-row>, затем каждую строку на ячейку <table-cell> и взять её <text> в переменную. Тут может быть полезен grep c регулярками.

zenity тогда можно откинуть и передавать напрямую в выполение или же можно подавать как дефолтные значения в диалоговое окошко для пошагового выполнения.

p/s - много текста получилось, но тут реально неограниченный простор для полета мысли... Как говорится - "есть у автоматизации начало, нет у автоматизации конца" laugh
Сообщений: 5
Вижу что работа проделана не маленькая, но, скорректирую задачу. Имеется файл экселя, в нем в столбики вбиты пользователи с номером сип и паролем от этого сипа, эти три параметра + ипадрес 192.168.??.?? Участвуют в итоговом скрипте. Звонит юзерг и говорит- так и так я сегодня на компе с ипадресом 97.123. В фильтре находим этого гада и ячейке адреса изменяем хвостик на 97.123. Итоговая ячейка скрипта производит исправление адреса и готова к вставке в терминал на исполнение. То есть подвергать изменениям столбцы кроме адреса нельзя так как это своеобразная база.
Сообщений: 0
не знаю к чему в calc прицепить макрос связанный с событием изменения строки.
исходный инструмент подобран неверно, на мой взгляд. Табличные процессоры все же не для этого придуманы
если это "база данных" по юзверям - почему бы ей и не жить в БД, хотя бы в sqlite.
написать к ней небольшую гуй-мордочку с возможностью редактирования записей и заветной кнопкой.

krazen:
Звонит юзерг и говорит- так и так я сегодня на компе с ипадресом 97.123. В фильтре находим этого гада и ячейке адреса изменяем хвостик на 97.123. Итоговая ячейка скрипта производит исправление адреса и готова к вставке в терминал на исполнение.

звонит юзверь, объявляет свой ип и сип - вбиваем их в поле ввода, жмякаем кнопку, происходит
Код SQL:
  1. UPDATE users SET ip='192.10' WHERE sip='123987';
затем код на выполнение нужной команды в шелле (с этим ip/sip/password), с перехватом и отображением stdout/stderr для контроля выполнения (ну или ексепшнов прикрутить по типовым случаям).
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.