Работа с Cmd
-
- beginner
- Сообщения: 27
- Зарегистрирован: 25 май 2015, 20:09
- Версия LabVIEW: 14.1
- Контактная информация:
Работа с Cmd
Имеется архиватор 7zip, работающий из под командной строки. Взаимодействие с командной строкой осуществляется посредством инструмента System Exec.vi.
Создание архива занимает некоторое время, в течение которого в консоль выводится статус операции в процентах. Я хочу считывать этот статус, отображая его в программе в виде слайдера загрузки.
Проблема заключается в том, что System Exec.vi возвращает вывод командной строки только после полного выполнения операции.
Каким образом я могу решить эту задачу?
Создание архива занимает некоторое время, в течение которого в консоль выводится статус операции в процентах. Я хочу считывать этот статус, отображая его в программе в виде слайдера загрузки.
Проблема заключается в том, что System Exec.vi возвращает вывод командной строки только после полного выполнения операции.
Каким образом я могу решить эту задачу?
- Вложения
-
- Программа запускает процесс архивации и ожидает его завершения.
- Пример исходного кода.png (2.87 КБ) 5372 просмотра
-
- Во время архивации в консоль выводится значение в процентах. Именно его я хочу считывать и парсить.
- Командная строка в процессе.png (8.52 КБ) 5372 просмотра
-
- System Exec.vi возвращает эту информацию после завершения архивации. Программа завершает свою работу.
- Вывод командной строки после выполнения операции.png (11.52 КБ) 5372 просмотра
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Работа с Cmd
Попробуйте эту виайку - https://forums.ni.com/t5/LabVIEW/URGENT ... ue#M366027. Она позволяет считать текст, а затем Вам нужно будет его правильно распарсить.
Мы делили апельсин - много наших полегло...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Работа с Cmd
Запустите
и в открывшемся окне cmd.exe вводите команды или любой текст. Индикатор
Std out должен обновляться после каждого ввода (клавиша Enter). Закройте окно cmd.exe.
![:vi: :vi:](./images/smilies/vi.png)
![:vi: :vi:](./images/smilies/vi.png)
- Вложения
-
- Blackman--ExecNET.vi
- LabVIEW 2016
- (25.81 КБ) 117 скачиваний
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Работа с Cmd
Пересохранил в более удобоваримую :) версию 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
Добавил 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 КБ) 115 скачиваний
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с Cmd
Странно, что никто не написал... Нативные каналы Windows (Pipes) прекрасно работают со стандартными потоками stdin, stdout и stderr, то есть, возможна полноценная работа с любым консольным приложением в реальном времени: не только запуск, но и передача/получение информации от приложения. Более развёрнуто о каналах я писал вот здесь. На то время существовал единственный тулкит для работы с каналами - OpenG Pipes (oglib_pipe) (можно поставить через VIPM). В настоящее время создан ещё один набор
- LV Process, который постабильнее в работе, более понятен и поддерживается/обновляется автором (хотя пока нет поддержки 64-битных LV).
В общем, я попробовал, каких-то особых "граблей" не заметил. Как юзать - качаем с гитхаба проект (зелёная кнопка "Clone or download"), распаковываем куда-нибудь, заходим в папку LV Process, открываем LV Process library.lvlib. Дальше можно открыть Demo.vi и посмотреть, как всё это работает. В коде легко разобраться, прочитав примечания на панели и диаграмме. Используя
из LV Process library.lvlib, можно написать что-то своё, например, переходя ближе к сабжу, вот такой код для архивации с помощью 7za:
Небольшое видео, демонстрирующее процесс сжатия: Обращаю также внимание на ключ -bs, который я добавил в исходную командную строку: progress information (p) > redirect to stdout stream (1)
Подход на .NET, предложенный Blackman, неплох и тоже имеет шанс на существование. Но только в том случае, если вас не беспокоит привязка программы (exe) к .NET Framework - при распространении программы его придётся ставить на целевые компы (если его там нет), и первоначальный запуск приложения будет несколько медленнее из-за подгрузки нескольких десятков DLL.
![:vi: :vi:](./images/smilies/vi.png)
В общем, я попробовал, каких-то особых "граблей" не заметил. Как юзать - качаем с гитхаба проект (зелёная кнопка "Clone or download"), распаковываем куда-нибудь, заходим в папку LV Process, открываем LV Process library.lvlib. Дальше можно открыть Demo.vi и посмотреть, как всё это работает. В коде легко разобраться, прочитав примечания на панели и диаграмме. Используя
![:vi: :vi:](./images/smilies/vi.png)
Небольшое видео, демонстрирующее процесс сжатия: Обращаю также внимание на ключ -bs, который я добавил в исходную командную строку: progress information (p) > redirect to stdout stream (1)
Подход на .NET, предложенный Blackman, неплох и тоже имеет шанс на существование. Но только в том случае, если вас не беспокоит привязка программы (exe) к .NET Framework - при распространении программы его придётся ставить на целевые компы (если его там нет), и первоначальный запуск приложения будет несколько медленнее из-за подгрузки нескольких десятков DLL.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Работа с Cmd
После установки пакета LV Process.vip в LabVIEW x32,
LV Process library.lvlib:Demo.vi не работает в Main Application Instance.
"Error 5000 occurred at LV Process library.lvlib:Check and Generate Path to lv_proc.vi".
LV Process library.lvlib:Demo.vi не работает в Main Application Instance.
![wink :wink:](./images/smilies/icon_wink.gif)
"Error 5000 occurred at LV Process library.lvlib:Check and Generate Path to lv_proc.vi".
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с Cmd
Не используйте vip пакет для установки через VIPM - он устарел. Просто скачайте архив с гитхаб и запустите файл из библиотеки.Blackman писал(а):После установки пакета LV Process.vip в LabVIEW x32,
LV Process library.lvlib:Demo.vi не работает в Main Application Instance.![]()
"Error 5000 occurred at LV Process library.lvlib:Check and Generate Path to lv_proc.vi".
ЗЫ: Кстати, в VIPM есть вот такие недоделки.
1. Иногда, когда
![:labview: :labview:](./images/smilies/labview.png)
![:labview: :labview:](./images/smilies/labview.png)
![:labview: :labview:](./images/smilies/labview.png)
![:labview: :labview:](./images/smilies/labview.png)
![dntknw :dntknw:](./images/smilies/icon_dntknw.gif)
2. Когда VIPM ожидает ответа от
![:labview: :labview:](./images/smilies/labview.png)
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Работа с Cmd
Что значит - он устарел? VIPM установил все правильно, в соответствии со spec, которая соответствует дереву проекта на GitHub. Все дело в LV Process library.lvlib:Check and Generate Path to lv_proc.vi, который не учитывает случай, когда Top Level VI и dll-ка расположены в разных папках.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с Cmd
По ссылке https://forums.ni.com/t5/Community-Docu ... -p/3497836 версия архива 0.6.0.1, тогда как на гитхаб 0.6.1.1.Blackman писал(а):Что значит - он устарел?
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Работа с Cmd
Я взял пакет на 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.
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
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Работа с Cmd
Знаю, що это off topic, но все же. Эта "фича" тоже долго меня нервировала, но решается все просто - в настройках можно поменять дефолтный таймаут (скажем, на 30 секунд - этого достаточно, чтобыdadreamer писал(а):2. Когда VIPM ожидает ответа отон ждёт 120 сек. В процесе ожидания я не могу никак отменить это дейстие - ни кнопка с красным крестом, ни File -> Close не срабатывают. Это не есть хорошо, надо бы сделать отдельную кнопку "Отмена" или как-то иначе.
![:labview: :labview:](./images/smilies/labview.png)
![:labview: :labview:](./images/smilies/labview.png)
Но ничего, посмотрим сможет ли NI Package Manager "вытеснить" старый добрый VIPM...
Мы делили апельсин - много наших полегло...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с Cmd
Они не конкуренты же, вроде как: один ставит тулкиты и прочий софт, другой ставит VI пакеты/адд-оны. Не припомню, чтобы NI где-то говорили, что откажутся от VIPM. Даже в инсталляторе LV 2019 предлагается установка VIPM (галка по дефолту установлена). Но может, я не располагаю всей информацией...Kosist писал(а):Но ничего, посмотрим сможет ли NI Package Manager "вытеснить" старый добрый VIPM...
![dntknw :dntknw:](./images/smilies/icon_dntknw.gif)
Ага, я помню тот тред, лень гугл напрягать, а встроенный поиск не работает... Эх.Kosist писал(а):где-то уже обсуждалось - что VIPM написан на основе JKI State Machine
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Работа с Cmd
NI Package Manager позволяет билдить собственные пакеты, т.е. практическим можно создавать свои тулкиты, и билдить их там. Но на практике - VIPM в этом рулит, и надеюсь что так будет и дальше, т.к. его использовать реально удобно.dadreamer писал(а):Они не конкуренты же, вроде как: один ставит тулкиты и прочий софт, другой ставит VI пакеты/адд-оны. Не припомню, чтобы NI где-то говорили, что откажутся от VIPM. Даже в инсталляторе LV 2019 предлагается установка VIPM (галка по дефолту установлена). Но может, я не располагаю всей информацией...
А недавно я встретил GPM - что-то похожее на менеджеры пакетов в других языках (pip, NuGet, npm). Но продукт свежий, сыроват - однако задумка хорошая, как мне кажется...
Мы делили апельсин - много наших полегло...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Работа с Cmd
Возможно, это как раз на 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)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 16 Ответы
- 3263 Просмотры
-
Последнее сообщение Artem.spb
-
- 4 Ответы
- 220 Просмотры
-
Последнее сообщение Andrew Lunev