Работа с Cmd

Простейшие вопросы в области инженерной разработки
Ответить
Аня
beginner
beginner
Сообщения: 27
Зарегистрирован: 25 май 2015, 20:09
Версия LabVIEW: 14.1
Контактная информация:

Работа с Cmd

Сообщение Аня »

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

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

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

Каким образом я могу решить эту задачу?
Вложения
Программа запускает процесс архивации и ожидает его завершения.
Программа запускает процесс архивации и ожидает его завершения.
Пример исходного кода.png (2.87 КБ) 5106 просмотров
Во время архивации в консоль выводится значение в процентах. Именно его я хочу считывать и парсить.
Во время архивации в консоль выводится значение в процентах. Именно его я хочу считывать и парсить.
Командная строка в процессе.png (8.52 КБ) 5106 просмотров
System Exec.vi возвращает эту информацию после завершения архивации. Программа завершает свою работу.
System Exec.vi возвращает эту информацию после завершения архивации. Программа завершает свою работу.
Вывод командной строки после выполнения операции.png (11.52 КБ) 5106 просмотров
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Работа с Cmd

Сообщение Kosist »

Попробуйте эту виайку - https://forums.ni.com/t5/LabVIEW/URGENT ... ue#M366027. Она позволяет считать текст, а затем Вам нужно будет его правильно распарсить.
Мы делили апельсин - много наших полегло...
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Работа с Cmd

Сообщение Blackman »

Запустите :vi: и в открывшемся окне cmd.exe вводите команды или любой текст. Индикатор :vi: Std out должен обновляться после каждого ввода (клавиша Enter). Закройте окно cmd.exe.
Вложения
Blackman--ExecNET.png
Blackman--ExecNET.vi
LabVIEW 2016
(25.81 КБ) 115 скачиваний
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Работа с Cmd

Сообщение 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
Вложения
Blackman--ExecNET 2013.vi
LabVIEW 2013
(31.22 КБ) 111 скачиваний
Заменить reference  control на strict reference Std out или property node на local variable
Заменить reference control на strict reference Std out или property node на local variable
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Работа с Cmd

Сообщение 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 КБ) 118 скачиваний
Небольшое видео, демонстрирующее процесс сжатия:
Untitled Project.zip
(846.63 КБ) 105 скачиваний
Обращаю также внимание на ключ -bs, который я добавил в исходную командную строку: progress information (p) > redirect to stdout stream (1)

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

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Работа с Cmd

Сообщение 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".
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Работа с Cmd

Сообщение 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 не срабатывают. Это не есть хорошо, надо бы сделать отдельную кнопку "Отмена" или как-то иначе.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Работа с Cmd

Сообщение Blackman »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Работа с Cmd

Сообщение dadreamer »

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

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Работа с Cmd

Сообщение 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.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Работа с Cmd

Сообщение Kosist »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Работа с Cmd

Сообщение dadreamer »

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

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Работа с Cmd

Сообщение Kosist »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Работа с Cmd

Сообщение 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)
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»