Работа с Cmd

Простейшие вопросы в области инженерной разработки

Работа с Cmd

Postby Аня on 13 Sep 2018, 15:05

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

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

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

Каким образом я могу решить эту задачу?
Attachments
Пример исходного кода.png
Программа запускает процесс архивации и ожидает его завершения.
Пример исходного кода.png (2.87 KiB) Viewed 2424 times
Командная строка в процессе.png
Во время архивации в консоль выводится значение в процентах. Именно его я хочу считывать и парсить.
Командная строка в процессе.png (8.52 KiB) Viewed 2424 times
Вывод командной строки после выполнения операции.png
System Exec.vi возвращает эту информацию после завершения архивации. Программа завершает свою работу.
Вывод командной строки после выполнения операции.png (11.52 KiB) Viewed 2424 times
Аня
beginner
beginner
 
Posts: 27
Joined: 25 May 2015, 20:09
LabVIEW Version: 14.1
Karma: 0

Re: Работа с Cmd

Postby Kosist on 13 Sep 2018, 15:31

Попробуйте эту виайку - https://forums.ni.com/t5/LabVIEW/URGENT ... ue#M366027. Она позволяет считать текст, а затем Вам нужно будет его правильно распарсить.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 988
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 279
CLAD I/O VIP students

Re: Работа с Cmd

Postby Blackman on 13 Sep 2018, 23:46

Запустите :vi: и в открывшемся окне cmd.exe вводите команды или любой текст. Индикатор :vi: Std out должен обновляться после каждого ввода (клавиша Enter). Закройте окно cmd.exe.
Attachments
Blackman--ExecNET.png
Blackman--ExecNET.vi
LabVIEW 2016
(25.81 KiB) Downloaded 38 times
Blackman
leader
leader
 
Posts: 883
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 259
VIP

Re: Работа с Cmd

Postby Blackman on 14 Sep 2018, 19:47

Пересохранил в более удобоваримую :) версию 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
Attachments
Blackman--ExecNET 2013.vi
LabVIEW 2013
(31.22 KiB) Downloaded 33 times
Blackman--ExecNET 2013.png
Заменить reference control на strict reference Std out или property node на local variable
Blackman
leader
leader
 
Posts: 883
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 259
VIP

Re: Работа с Cmd

Postby dadreamer on 15 Sep 2018, 21:17

Странно, что никто не написал... Нативные каналы 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 KiB) Downloaded 34 times

Небольшое видео, демонстрирующее процесс сжатия:
Untitled Project.zip
(846.63 KiB) Downloaded 33 times

Обращаю также внимание на ключ -bs, который я добавил в исходную командную строку: progress information (p) > redirect to stdout stream (1)

Подход на .NET, предложенный Blackman, неплох и тоже имеет шанс на существование. Но только в том случае, если вас не беспокоит привязка программы (exe) к .NET Framework - при распространении программы его придётся ставить на целевые компы (если его там нет), и первоначальный запуск приложения будет несколько медленнее из-за подгрузки нескольких десятков DLL.
User avatar
dadreamer
professor
professor
 
Posts: 3326
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 844
I/O VIP vision internet

Re: Работа с Cmd

Postby Blackman on 16 Sep 2018, 00:57

После установки пакета 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".
Blackman
leader
leader
 
Posts: 883
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 259
VIP

Re: Работа с Cmd

Postby dadreamer on 16 Sep 2018, 01:52

Blackman wrote:После установки пакета 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 не срабатывают. Это не есть хорошо, надо бы сделать отдельную кнопку "Отмена" или как-то иначе.
User avatar
dadreamer
professor
professor
 
Posts: 3326
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 844
I/O VIP vision internet

Re: Работа с Cmd

Postby Blackman on 16 Sep 2018, 02:15

Что значит - он устарел? VIPM установил все правильно, в соответствии со spec, которая соответствует дереву проекта на GitHub. Все дело в LV Process library.lvlib:Check and Generate Path to lv_proc.vi, который не учитывает случай, когда Top Level VI и dll-ка расположены в разных папках.
Blackman
leader
leader
 
Posts: 883
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 259
VIP

Re: Работа с Cmd

Postby dadreamer on 16 Sep 2018, 02:33

Blackman wrote:Что значит - он устарел?

По ссылке https://forums.ni.com/t5/Community-Docu ... -p/3497836 версия архива 0.6.0.1, тогда как на гитхаб 0.6.1.1.
User avatar
dadreamer
professor
professor
 
Posts: 3326
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 844
I/O VIP vision internet

Re: Работа с Cmd

Postby Blackman on 16 Sep 2018, 11:43

Я взял пакет на 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.
Blackman
leader
leader
 
Posts: 883
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 259
VIP

Re: Работа с Cmd

Postby Kosist on 06 Jul 2019, 22:07

dadreamer wrote:2. Когда VIPM ожидает ответа от :labview: он ждёт 120 сек. В процесе ожидания я не могу никак отменить это дейстие - ни кнопка с красным крестом, ни File -> Close не срабатывают. Это не есть хорошо, надо бы сделать отдельную кнопку "Отмена" или как-то иначе.

Знаю, що это off topic, но все же. Эта "фича" тоже долго меня нервировала, но решается все просто - в настройках можно поменять дефолтный таймаут (скажем, на 30 секунд - этого достаточно, чтобы :labview: запустилось). И все, даже если кнопка "Отмена" не работает (а это следствие архитектуры, где-то уже обсуждалось - что VIPM написан на основе JKI State Machine, и пока он ждет открытия :labview:, нажатие на кнопку не обрабатывается, т.к. структура событий неактивная), то ждать нужно намного меньше.
Но ничего, посмотрим сможет ли NI Package Manager "вытеснить" старый добрый VIPM...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 988
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 279
CLAD I/O VIP students

Re: Работа с Cmd

Postby dadreamer on 06 Jul 2019, 22:13

Kosist wrote:Но ничего, посмотрим сможет ли NI Package Manager "вытеснить" старый добрый VIPM...

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

Ага, я помню тот тред, лень гугл напрягать, а встроенный поиск не работает... Эх.
User avatar
dadreamer
professor
professor
 
Posts: 3326
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 844
I/O VIP vision internet

Re: Работа с Cmd

Postby Kosist on 06 Jul 2019, 22:25

dadreamer wrote:Они не конкуренты же, вроде как: один ставит тулкиты и прочий софт, другой ставит VI пакеты/адд-оны. Не припомню, чтобы NI где-то говорили, что откажутся от VIPM. Даже в инсталляторе LV 2019 предлагается установка VIPM (галка по дефолту установлена). Но может, я не располагаю всей информацией... :dntknw:

NI Package Manager позволяет билдить собственные пакеты, т.е. практическим можно создавать свои тулкиты, и билдить их там. Но на практике - VIPM в этом рулит, и надеюсь что так будет и дальше, т.к. его использовать реально удобно.
А недавно я встретил GPM - что-то похожее на менеджеры пакетов в других языках (pip, NuGet, npm). Но продукт свежий, сыроват - однако задумка хорошая, как мне кажется...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 988
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 279
CLAD I/O VIP students

Re: Работа с Cmd

Postby dadreamer on 06 Jul 2019, 22:48

Возможно, это как раз на 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)
User avatar
dadreamer
professor
professor
 
Posts: 3326
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 844
I/O VIP vision internet


Return to Для чайников

Who is online

Users browsing this forum: MSN, Yandex and 1 guest

cron