Страница 1 из 1

Работа с Cmd

Добавлено: 13 сен 2018, 15:05
Аня
Имеется архиватор 7zip, работающий из под командной строки. Взаимодействие с командной строкой осуществляется посредством инструмента System Exec.vi.

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

Проблема заключается в том, что System Exec.vi возвращает вывод командной строки только после полного выполнения операции.

Каким образом я могу решить эту задачу?

Re: Работа с Cmd

Добавлено: 13 сен 2018, 15:31
Kosist
Попробуйте эту виайку - https://forums.ni.com/t5/LabVIEW/URGENT ... ue#M366027. Она позволяет считать текст, а затем Вам нужно будет его правильно распарсить.

Re: Работа с Cmd

Добавлено: 13 сен 2018, 23:46
Blackman
Запустите :vi: и в открывшемся окне cmd.exe вводите команды или любой текст. Индикатор :vi: Std out должен обновляться после каждого ввода (клавиша Enter). Закройте окно cmd.exe.

Re: Работа с Cmd

Добавлено: 14 сен 2018, 19:47
Blackman
Пересохранил в более удобоваримую :) версию 2013.
Добавил 2 режима работы (чтения):
1. NOT TO READ - аналогично wait until completion? = FALSE в System Exec
2. READ TO END - аналогично wait until completion? = TRUE в System Exec
Доработал режим READ LINE (обновление Std Out во время работы программы) - нет в System Exec

Re: Работа с Cmd

Добавлено: 15 сен 2018, 21:17
dadreamer
Странно, что никто не написал... Нативные каналы Windows (Pipes) прекрасно работают со стандартными потоками stdin, stdout и stderr, то есть, возможна полноценная работа с любым консольным приложением в реальном времени: не только запуск, но и передача/получение информации от приложения. Более развёрнуто о каналах я писал вот здесь. На то время существовал единственный тулкит для работы с каналами - OpenG Pipes (oglib_pipe) (можно поставить через VIPM). В настоящее время создан ещё один набор :vi: - LV Process, который постабильнее в работе, более понятен и поддерживается/обновляется автором (хотя пока нет поддержки 64-битных LV).

В общем, я попробовал, каких-то особых "граблей" не заметил. Как юзать - качаем с гитхаба проект (зелёная кнопка "Clone or download"), распаковываем куда-нибудь, заходим в папку LV Process, открываем LV Process library.lvlib. Дальше можно открыть Demo.vi и посмотреть, как всё это работает. В коде легко разобраться, прочитав примечания на панели и диаграмме. Используя :vi: из LV Process library.lvlib, можно написать что-то своё, например, переходя ближе к сабжу, вот такой код для архивации с помощью 7za:
2018-09-15_22-58-57.jpg
7z_Pipe_Test.vi
lv2014
(18.65 КБ) 120 скачиваний
Небольшое видео, демонстрирующее процесс сжатия:
Untitled Project.zip
(846.63 КБ) 106 скачиваний
Обращаю также внимание на ключ -bs, который я добавил в исходную командную строку: progress information (p) > redirect to stdout stream (1)

Подход на .NET, предложенный Blackman, неплох и тоже имеет шанс на существование. Но только в том случае, если вас не беспокоит привязка программы (exe) к .NET Framework - при распространении программы его придётся ставить на целевые компы (если его там нет), и первоначальный запуск приложения будет несколько медленнее из-за подгрузки нескольких десятков DLL.

Re: Работа с Cmd

Добавлено: 16 сен 2018, 00:57
Blackman
После установки пакета LV Process.vip в LabVIEW x32,
LV Process library.lvlib:Demo.vi не работает в Main Application Instance. :wink:
"Error 5000 occurred at LV Process library.lvlib:Check and Generate Path to lv_proc.vi".

Re: Работа с Cmd

Добавлено: 16 сен 2018, 01:52
dadreamer
Blackman писал(а):После установки пакета LV Process.vip в LabVIEW x32,
LV Process library.lvlib:Demo.vi не работает в Main Application Instance. :wink:
"Error 5000 occurred at LV Process library.lvlib:Check and Generate Path to lv_proc.vi".
Не используйте vip пакет для установки через VIPM - он устарел. Просто скачайте архив с гитхаб и запустите файл из библиотеки.

ЗЫ: Кстати, в VIPM есть вот такие недоделки.
1. Иногда, когда :labview: не запущен, и нужно установить пакет, VIPM запускает :labview: и ждёт его ответа. Но по какой-то непонятной причине ответа не получает, хотя :labview: открыт и всё ок. В настройках :labview: всё на вкладке VI Server разрешено и всё должно работать (и часто работает). В чём тут проблема, я даже без понятия. :dntknw:
2. Когда VIPM ожидает ответа от :labview: он ждёт 120 сек. В процесе ожидания я не могу никак отменить это дейстие - ни кнопка с красным крестом, ни File -> Close не срабатывают. Это не есть хорошо, надо бы сделать отдельную кнопку "Отмена" или как-то иначе.

Re: Работа с Cmd

Добавлено: 16 сен 2018, 02:15
Blackman
Что значит - он устарел? VIPM установил все правильно, в соответствии со spec, которая соответствует дереву проекта на GitHub. Все дело в LV Process library.lvlib:Check and Generate Path to lv_proc.vi, который не учитывает случай, когда Top Level VI и dll-ка расположены в разных папках.

Re: Работа с Cmd

Добавлено: 16 сен 2018, 02:33
dadreamer
Blackman писал(а):Что значит - он устарел?
По ссылке https://forums.ni.com/t5/Community-Docu ... -p/3497836 версия архива 0.6.0.1, тогда как на гитхаб 0.6.1.1.

Re: Работа с Cmd

Добавлено: 16 сен 2018, 11:43
Blackman
Я взял пакет на GitHub:
https://github.com/KaeroDot/GOLPI/blob/ ... p?raw=true

LV Process: build v. 0.6.1.1, only source distribution to GOLPI. Package build not needed, no code change.

Re: Работа с Cmd

Добавлено: 06 июл 2019, 22:07
Kosist
dadreamer писал(а):2. Когда VIPM ожидает ответа от :labview: он ждёт 120 сек. В процесе ожидания я не могу никак отменить это дейстие - ни кнопка с красным крестом, ни File -> Close не срабатывают. Это не есть хорошо, надо бы сделать отдельную кнопку "Отмена" или как-то иначе.
Знаю, що это off topic, но все же. Эта "фича" тоже долго меня нервировала, но решается все просто - в настройках можно поменять дефолтный таймаут (скажем, на 30 секунд - этого достаточно, чтобы :labview: запустилось). И все, даже если кнопка "Отмена" не работает (а это следствие архитектуры, где-то уже обсуждалось - что VIPM написан на основе JKI State Machine, и пока он ждет открытия :labview:, нажатие на кнопку не обрабатывается, т.к. структура событий неактивная), то ждать нужно намного меньше.
Но ничего, посмотрим сможет ли NI Package Manager "вытеснить" старый добрый VIPM...

Re: Работа с Cmd

Добавлено: 06 июл 2019, 22:13
dadreamer
Kosist писал(а):Но ничего, посмотрим сможет ли NI Package Manager "вытеснить" старый добрый VIPM...
Они не конкуренты же, вроде как: один ставит тулкиты и прочий софт, другой ставит VI пакеты/адд-оны. Не припомню, чтобы NI где-то говорили, что откажутся от VIPM. Даже в инсталляторе LV 2019 предлагается установка VIPM (галка по дефолту установлена). Но может, я не располагаю всей информацией... :dntknw:
Kosist писал(а):где-то уже обсуждалось - что VIPM написан на основе JKI State Machine
Ага, я помню тот тред, лень гугл напрягать, а встроенный поиск не работает... Эх.

Re: Работа с Cmd

Добавлено: 06 июл 2019, 22:25
Kosist
dadreamer писал(а):Они не конкуренты же, вроде как: один ставит тулкиты и прочий софт, другой ставит VI пакеты/адд-оны. Не припомню, чтобы NI где-то говорили, что откажутся от VIPM. Даже в инсталляторе LV 2019 предлагается установка VIPM (галка по дефолту установлена). Но может, я не располагаю всей информацией... :dntknw:
NI Package Manager позволяет билдить собственные пакеты, т.е. практическим можно создавать свои тулкиты, и билдить их там. Но на практике - VIPM в этом рулит, и надеюсь что так будет и дальше, т.к. его использовать реально удобно.
А недавно я встретил GPM - что-то похожее на менеджеры пакетов в других языках (pip, NuGet, npm). Но продукт свежий, сыроват - однако задумка хорошая, как мне кажется...

Re: Работа с Cmd

Добавлено: 06 июл 2019, 22:48
dadreamer
Возможно, это как раз на NXG будет ориентировано в большей степени. Нашёл вот такую статейку: https://forums.ni.com/t5/NI-Package-Man ... anguage=en
For LabVIEW NXG:

In the future, you will be able to use NIPM to also distribute source/development code (reuse libraries, development tools, etc)