Аватар для sunjob
0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 40

Формошлепство на Linux для простого пользователя

22.06.2020, 20:58. Показов 2299. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день

1. планы, описание задачи:

хочу разобраться и наработать методику/код "формошлЁп-скрИптинга" для простого пользователя :о)
- GUI-формы будут на QT4/Lazarus (в данном случае рассматриваем QT4)

в GUI-форме:
- вызовы скриптов, внешних команд и пр...
- получение выхлопа скрипта & ERRORLEVEL для дальнешего анализа

т.к. GUI будут на QT4, то запуск скрипта / чтение выхлопа / ERR_LEVEL, ск.всего, будет на базе QT4

2. настройки и рабочие скрипты

- ini-файл с настройками
- каталог со скриптами (либо стандартный PATH)

3. чтение ini-файла, запуск скриптов

- GUI-программа загружает в буфер содержимое ini-файла
- реакция на кнопку -> вызов обработчика, типа:
Code
1
run_id(int ID);
- обработчик парсит буфер ini-файла, по ID получает имя_скрипта
- запуск скрипта, анализ выхлопа/кода возврата и ... дальнейшая реализация в зов-ти от фантазии :о)

КОД_1 - запуск внешнего скрипта
архив code_1.tar.xz

Примерный выхлоп основной программы:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
### qDebug() 
 exitCode  () = ' 2 '
 exitStatus() = ' 0 '
 str_out      = ' "test script 2, arg=--add_scr2_arg --add_qt_app_arg
" '
 str_err      = ' "" '
 
### printf()
exitCode  () = '2'
exitStatus() = '0'
str_out   () = 'test script 2, arg=--add_scr2_arg --add_qt_app_arg
'
str_err   () = ''
ВОПРОСЫ

1. qDebug - имеет "обрамление" с обоих сторон строк в виде:
Code
1
' "' + '" '
(т.е. пробел + символ ковычки)

ВОПРОС 1: это особенности отладочного вывода qDebug ?

в обоих случаях qDebug & printf при "выхлопе текста" запускаемого скрипта - "странная" печать строки, с переносом в конце, хотя сам выхлоп скрипта без переноса
Code
1
2
str_out   () = 'test script 2, arg=--add_scr2_arg --add_qt_app_arg
' !!! <-- вот тут перенос конца строки
ВОПРОС 2 :почему?

прочие ВОПРОСЫ:
- может, для внутреннего использования, лучше/проще по старинке использоавть string, или вообще простой буфер char* str?

мне самому не оч. нравиться использовать qt-классы, для таких простых операций, но !!! логично писать в той "эко-системе" в которой пишешь GUI, мало-ли чего там еще в будущем шарахнет использовать, передать "какой особенный" параметр в QT4/GUI... имхо

уточнение:
- именно QT4
- согласен, для простых GUI на cli/YAD/Zenity, логично "это" делать на bash/perl итд, кому, что удобнее
- в инете есть много "простых" примеров с "кодом" на с/с++, но я не встречал что-бы было реализовано одновременно при запуске скрипта получение выхлопа и кодa-возврата.
- так-же не встречал подходящих/удобных/минимальных примеров/библиотек парсинга ini-файла, что-бы была организована работа с буфером а не с потоками (т.к. каждый раз для чтения ini-файла создаются/закрываются потоки... это не оптимально, надо будет подходящую библиотеку доробатывать, на примете inih, посмотрим, что можно сделать с ней :о)

буду благодарен за подсказки, ссылки, код итд ...

вопросы по написанию GUI и парсинг ini-файла будут позже

архив code_1.tar.xz

Проект на sourceforge.net.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2020, 20:58
Ответы с готовыми решениями:

.NET Framework для разработчика и .NET Framework для простого пользователя это одно и тоже?
Если я обычный пользователь компьютера и не разрабатываю приложения .NET Framework, но запускаю их и пользуюсь ими на своём ПК и наоборот...

Что лучше для пользователя Linux, консоль или окна?
А какой толк от консоли? Зачем ее изучать обычному пользователю?

Нужны исходники простого простого приложения под Android для примера
можете дать ссылку на приложение под андроид?не Hello Word а какое нибудь другое но тоже простое на подобие этого ?хочу понять как...

24
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
27.06.2020, 11:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sunjob Посмотреть сообщение
в процессе работы мы немного поднастроили программу, интерфейс, что-то еще... (те самые настройки в ini-файле), но мне не нужно было сохранять их, эти настройки, они были, типа "для посмотреть, для времено поработать"..
а она без нашего ведома, во время закрытия перезаписала настройки... так?
Если вы меняете данные внутри QSettings, значит декларируете ваше желание о том, чтобы они изменились в файле. Так что тут не может быть "без ведома". Вас же предупреждают об этом в документации.

Также функция все равно не будет ничего записывать, если файл был помечен каким-либо образом флагом "только для чтения".
Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. если файл не меняется, то единственное место, где будет открыт файл - это конструктор (там же он будет и закрыт после чтения).
То, что функция sync вызывается - не означает, что она что-то будет записывать или читать. Это она делает только в случае, если файл должен измениться.
0
 Аватар для sunjob
0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 40
27.06.2020, 17:32  [ТС]
да, все как то так... :о) но карявенько! в мое понимание как-то не совсем вписывается (ну это частности и субьективности) :о)

Если вы меняете данные внутри QSettings, значит декларируете ваше желание о том, чтобы они изменились в файле.
напомнило ...
по своему он прав, а ... по моему - нет!
итак, танцуем от печки

сохраненный в памяти обьект ini-файл, далее [*] - и будем рассматривать эту самую печку, source/источник, т.к. иметь два обьекта настроек (в памяти (*) и еще отдельный обьект/структуру с истинными полями) - это слишком расточительно! должен быть один (а то так можно дойти и до отдельных архивных копий на каждый день в текущем рабочем экземпляре программы)

ну и ... одно вытекает из другого: если у нас один источник настроек (*) из которого и "черпает настройки" приложение, то, настраивая/изменяя его мы и ... натыкаемся на те самые грабли, с принудительным сохранением (т.е. все по хелпу, все так как "надо", но на деле, с "моим подходом" - совсем не логично, не удобно итд)

так может что-то надо в консерватории подправить?
или в своей точке зрения на подход к работе с QSettings?
может я что-то непонимаю, не знаю, в парадигме QT?

...

То, что функция sync вызывается - не означает, что она что-то будет записывать или читать. Это она делает только в случае, если файл должен измениться.
а откуда "она" узнает, что "файл должен измениться"? держим первородную копию обьекта в памяти (или хеш)?

Также функция все равно не будет ничего записывать, если файл был помечен каким-либо образом флагом "только для чтения".
где "помечен"? в файловой системе? дак это очевидно?!!! и не относится к логике работы обьекта QSettings... или где-то в кутях?

Добавлено через 8 минут
в данном случае я не пытаюсь заточить QT под "свои кривые руки", я хочу понять логику/структуру (и опять-таки парадигму, слово какое подходящее :о))) , что-бы ей пользоваться далее для работы, в данном случае с обьектом QSettings.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.06.2020, 19:02
Цитата Сообщение от sunjob Посмотреть сообщение
GUI-формы будут на QT4
По чему не Qt3 он же раритетнее?
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
27.06.2020, 20:02
Цитата Сообщение от sunjob Посмотреть сообщение
и не относится к логике работы обьекта QSettings... или где-то в кутях?
Относится. QSettings явно смотрит на флаги файловой системы и строит логику на основании этого.

Цитата Сообщение от sunjob Посмотреть сообщение
а откуда "она" узнает, что "файл должен измениться"? держим первородную копию обьекта в памяти (или хеш)?
Нет, ничего не держится. Там просто флаг - "надо обновлять\не надо обновлять". Если вы вызвали setValue с новыми данными, то флаг этот сбрасывается, и следующий вызов sync попробует обновить данные в файле. Если файл доступен для записи - эта попытка закончится успехом. Если нет, то ничего не произойдет, файл останется прежним.

Цитата Сообщение от sunjob Посмотреть сообщение
в данном случае я не пытаюсь заточить QT под "свои кривые руки"
Вообще никто не утверждал, что QSettings всенепременно вам подойдет. Я лишь поправил очевидно неверные выводы о его работе (про потоки и чтение файла на каждый чих). Что дальше с этим делать - всецело ваша зона ответственности.

Добавлено через 15 минут
Цитата Сообщение от sunjob Посмотреть сообщение
напомнило ...
по своему он прав, а ... по моему - нет!
Ну, понимаете ли. Если вы берете инструмент, то вы вынуждены принимать правила его использования. Если вы взяли сверло по дереву, то вы декларируете, что собираетесь сверлить дерево. Если вы рассчитывали им просверлить металл, то это ошибка - не получится, или получится, но это будет выглядеть "карявенько" (с). И сверло не виновато, что вам на самом деле нужно было работать с металлом.

Тоже самое с QSettings - есть документация, в которой описаны правила работы с ним. Так что если вы что-то делаете с QSettings, то подписываетесь под правилами его использования.

В любом случае - задача верного выбора инструмента - это ваша задача, на форуме никто не знает что вы собираетесь делать с ini-парсером, поэтому и выбрать за вас никто не сможет. Вам только могут подсказать, что ini-парсер в Qt - есть (это было сделано), указать на явные ошибки в понимании его работы (это тоже было сделано). Форум свою функцию выполнил, дальше ваш ход.
0
 Аватар для sunjob
0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 40
01.07.2020, 19:36  [ТС]
дотошно потестировал QSettings ... действительно ... не очень удобный и не доработанный "объект"
люди аж с 15го года на форумах его ругают, пишут про косяки и недоделанность... видимо, воз и ныне там :о)

остановился на IniParser - маленькая, простая, удобная, все на месте, под рукой, понятно-логично

спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2020, 19:36

Не запускается Cygwin под Win7 от простого пользователя
Здравствуйте дорогие форумчани! Дело вот в чём: переустановил винду, тогда стал ставить свои любимые программки, в том числе и cygwin....

Сборка исходников RakNet и запуск простого примера под Linux
Привет. В плюсах я новичок. Пытаюсь собрать простой пример тестового чата из RakNet...

Пример работы простого профайла пользователя на Laravel 5.7 (можно и 5.5) - подскажите пожалуйста
Здравствуйте. Я совсем недавно начал изучать Laravel, поэтому простейшие вещи вызывают кучу вопросов, и чем больше я читаю...

Простой выбор простого движка для простого сайта с простой БД
Здравствуйте, уважаемые знатоки! Встала задача - нужно выбрать простой движок для сайта по аренде квартир Принцип работы прост до...

Разница в работе bat-файла при его запуске от имени простого пользователя и от имени администратора
Здравствуйте. Пытаюсь создать .bat который: создаёт папку %ProgramFiles%\MyProg и копирует туда файлы создаёт папку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru