artbear / 1commands Goto Github PK
View Code? Open in Web Editor NEWБиблиотека для упрощения работы c запуском различных приложений и командных файлов (cmd, bat, bash) из oscript.
License: Other
Библиотека для упрощения работы c запуском различных приложений и командных файлов (cmd, bat, bash) из oscript.
License: Other
@nixel2007
Охохо... logos дает лишний префикс перед строкой. Да еще и только в отладочном режиме :(
Нельзя просто взять и прочитать вывод команды - он будет искажен :(
@artbear
artbear 2 days ago Owner
Предложения?
@nixel2007
nixel2007 2 days ago Collaborator
Либо Сообщить() либо поменять раскладку у logos - чтобы без уровня выводилось. и переделать на Информация, наверное. А лучше дать возможность управлять уровнем лога - т.е. выводить не в основной/не только в основной лог 1commands, а в отдельный и дать апи по управлению уровнем наверх.
@artbear
artbear 2 days ago Owner
Либо Сообщить()
Не всегда нужно выводить в консоль вывод, ИМХО это должен решать клиент-разработчик, а не Команда.
дать апи по управлению уровнем наверх.
Поясни
@nixel2007
nixel2007 2 days ago Collaborator
предоставить у класса Команда свойство/метод разрешения непосредственного вывода в лог
предоставить у класса Команда метод УстановитьУровеньЛогаВыводаКоманды()
Пример работы приложения:
Команда = Новый Команда();
Команда.УстановитьЧтоТамНадоУстановить();
Команда.ВыводитьСообщенияКомандыВЛог(Истина);
Команда.УстановитьУровеньЛогаВыводаКоманды(УровниЛога.Информация);
@nixel2007
nixel2007 2 days ago Collaborator
при этом у лога вывода команды и у лога самой команды разные инстансы Логирования.
1commands пишет в lib.oscript.1commands, а непосредственный вывод в какой-нибудь "lib.oscript.1commands.exec"
@artbear
artbear 23 hours ago Owner
А не слишком ли усложняем ?
Предлагаю создать новый ишуз и там продолжить обсуждение.
Сейчас вывод процесса в логах очень сложно оценить, поскольку он дублируется в трех местах.
получается, что лог замусорен результатами выхлопа процесса и сложно определять - это тот же запуск процесса просто 3 раза повторен, или был другой запуск процесса.
Например отладочное сообщение "в цикле - " ничего не говорит пользователю. Это чисто разработческий костыль на момент, когда не было отладчика.
Команда.ПоказыватьВыводНемедленно(Ложь);
По умолчанию - истина.
В гитсинке - ложь. в 1бдд - истина.
Часто параметры очередной команды Командного файла собираются предварительно в массив параметров.
Например,
ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить("git status");
ПараметрыКоманды.Добавить("-b");
ПараметрыКоманды.Добавить("-s");
Удобно добавить метод ДобавитьПараметры(Знач МассивПараметров)
Было бы удобно добавлять подобный набор параметров в методеДобавитьКоманду(Знач Команда)
В итоге этот метод будет принимать один из 2х видов параметров
+ Строка - уже собранная строка параметров команды
+ Массив - массив параметров команды. которые нужно собрать в одну строку`
И станет удобнее пользоваться классом "КомандныйФайл"
Например, в gitsync
В случае получения неправильного кода возврата должно выбрасываться исключение с текстом вывода команды.
API:
УстановитьПравильныйКодВозврата(Знач КодВозврата);
УстановитьДиапазонПравильныхКодовВозврата(Знач МинимальныйКодВозврата, Знач МаксимальныйКодВозврата);
Реализовать модуль Команды для выполнения наиболее популярных наборов команд
Например, в vanessa-runner и других приходится использовать/дублировать метод
Функция ИсполнитьКоманду(Знач СтрокаВыполнения) Экспорт
Команда = Новый Команда;
Команда.ПоказыватьВыводНемедленно(Истина);
Команда.УстановитьПравильныйКодВозврата(0);
Лог.Информация(СтрокаВыполнения);
Команда.УстановитьСтрокуЗапуска(СтрокаВыполнения);
Команда.Исполнить();
КонецФункции
На версии 1.21 проблема при коммите через SourceTree v 2* ошибка:
Ошибка Внешнее исключение (System.ArgumentException): Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’}
API: УстановитьТаймаут(Знач Секунд);
При превышении таймаута должно выбрасываться исключение с накопленным выводом команды и описанием проблемы таймаута
Полезно для уменьшения загрузки системы и выделения ее ресурсов на другие процессы в момент ожидания.
API: УстановитьПериодОпросаЗавершения(Знач Миллисекунд);
// Установить новые параметры команды.
// Может использовать для очистки параметров. Для этого нужно передать пустую строку
//
// Параметры:
// Строка - параметы в одной строке
//
Процедура УстановитьПараметры(Знач СтрокаПараметров) Экспорт
Сейчас принудительно перехватывается ввод и вывод процесса
Предлагаю сделать возможность это переопределять, для того чтобы запущенные процессы писали в текущую консоль
Имею 1bdd.bat
Создаю команду
Команда = Новый Команда;
Команда.УстановитьКоманду("1bdd");
Команда.Исполнить();
Ловлю эксепшн "не найден указанный файл"
Сейчас можно только запустить и подождать!
Надо добавить метод ЗапуститьПроцесс
который будет возвращать процесс для дальнейшей обработки
@artbear commented on Sun Mar 19 2017
Иногда часть вывода команды "сливается" с последующим выводом.
Например, в фичах vanessa-runner при проверке команды --help
@artbear
Новый функционал хочу использовать уже
Неверный запуск команд, в которых есть кавычки в нескольких местах
Например, "C:\Program Files(x86)\Приложение.bat" "параметры приложения"
В библиотечном модуле выглядит странным хардкод для параметров
Функция ЗапуститьИПодождать()
...
Если Лев(Параметр, 2) <> "/P" и Лев(Параметр, 25) <> "/ConfigurationRepositoryP" Тогда
Приезжает ошибка от разных пользователей
Например,
С какого-то времени, точно уже не помню,
коммит через SourceTree выдает ошибку, если в репо установлен precommit1c:
ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла
c:\testgit\MIS_TEMPLATES.epf в каталог c:\testgit\src, корень c:\testgit
ОШИБКА - {Модуль C:\OneScript\lib\1commands\src\Команда.os /
Ошибка в строке: 310 / Внешнее исключение (System.ArgumentException):
Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’}
Появилась в последнем релизе
виноват вызов ПеременныеСреды()
при создании процесса.
Если КодировкаВывода = Неопределено Тогда
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог,
ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды());
Иначе
Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог,
ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды());
КонецЕсли;
Единственный способ обхода - вернуться к предыдущему релизу :(
/cc @dmpas @EvilBeaver исправьте в движке, реально отравляет жизнь.
Переделать с ПрочитатьСтроку на Прочитать - меньше шанс словить дедлок на буферах, т.к. будет меньше обращений к самому буферу.
Дано: limux
Запуск: команды gitsync для хранилища
Зависание на 5 версии.
Видимо переполнение потока вывода т.к. выполнении тоже команды в консоле не приводит к зависанию
Например, это удобно при запуске GUI-утилиты, которая может отработать и вывести свои сообщения в собственный лог-файл.
Например, так можно получить лог от Конфигуратора 1С.
Нужны 2 метода для классов "Команда" и "КомандныйФайл" :
Процедура УстановитьПутьЛогаКоманды(ПутьЛога)
Функция ПолучитьЛогКоманды()
@khorevaa Да, с твоим исправлением https://github.com/artbear/1commands/pull/39/files#r272368503
стал падать специально сделанный сценарий
Сценарий: Выполнение команды с пробелами
Допустим Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог
И Я установил рабочий каталог как текущий каталог
Когда Я выполняю команду 'echo echo 456 > "Мой командный файл.cmd"' через командный процессор системы
Когда Я выполняю команду '"Мой командный файл.cmd" "78 9"' через командный процессор системы
И Вывод команды '"Мой командный файл.cmd" "78 9"' содержит "456"
ОписаниеОшибкиВыполнения У шага <Вывод команды '"Мой командный файл.cmd" "78 9"' содержит "456">
{Модуль C:\Program Files (x86)\OneScript\lib\asserts\src\bdd-asserts.os / Ошибка в строке: 336
/ [Failed] Ожидали, что проверяемое значение ("Мой" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
) СОДЕРЖИТ (456).
Проверишь? что скажешь?
это я все готовлюсь к релизу :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.