Piper — запуск консольных программ с передачей input и удобным доступом к output

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

На основе Execute ⓒ zg

Преимущества:
  • можно передать данные через input stream.
  • output можно получить как сразу целиком, так и частями (построчно, или произвольными кусками, по мере их доступности).
  • Для доступа к частям используются итераторы (что для lua идиоматичнее колбеков как в Execute)
  • опционально: output форматируется под заданную ширину
  • доступен код возврата программы
  • предусмотрена обработка ошибок
Executes a specified command, putting the specified text to it's input stream, and providing convenient access to the command's output/err. Syntax: obj = sh.piper(cmdline [,options]) cmdline: a string specifying the command to be executed options: a table with optional keys: - directory: a string specifying the working directory for the command - input: a string representing the text to be provided as input to the command - isOem: a boolean, if true then CP en-/decoding performed - linewrap: a number specifying the maximum width for each line of output obj: a table with the following keys: - all: a string containing all the output generated by the executed command - chunks: an iterator function that returns the output in raw chunks - lines: an iterator function that returns the output line by line - streamlines: an iterator function that returns the output line by line in a stream-like manner. It adds more data to each line as it becomes available. The iterator keeps returning the same line with more data until it is complete, and then adds a second `true` value to indicate completion. - ExitCode: an integer representing the exit code of the command (obtained from GetExitCodeProcess)
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

модуль для запуска консольных программ и получения их вывода

Post by John Doe »

Уточнение: теперь input перекодируется в OEM.
предполагаю что это может оказаться нежелательно в некоторых случаях, но прежде чем "улучшать" хотелось бы столкнуться с реальным примером.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

модуль для запуска консольных программ и получения их вывода

Post by buniak_a_h »

Извините меня, тупого, но у меня какой-то вопрос, и по примерам не могу найти ответ.
В старой версии модуля результат был код возврата. Теперь возвращает таблицу:
hProcess │cdata ˜ all │function ˜ lines │function
Как из неё получить код возврата? В самом модуле написано так, что для того, чтоб разобраться, надо изучать тонкости lua.
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

модуль для запуска консольных программ и получения их вывода

Post by John Doe »

buniak_a_h wrote: Sat 28 Aug, 2021 03:20 Теперь возвращает таблицу:
В этой таблице надо взять ExitCode.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

модуль для запуска консольных программ и получения их вывода

Post by buniak_a_h »

John Doe wrote: Fri 06 Aug, 2021 13:55
Скачать
Уважаемый John Doe! Написал я для другого человека маленький скрипт, использующий Ваш модуль execute, дал ссылку на эту тему для скачивания, человек (совершенно логично) взял модуль из первого сообщения темы и предсказуемо получил вылет. Не могли бы Вы актуализировать первую запись? Чтобы не вводить людей в заблуждение. Ну и заодно неплохо бы в тексте модуля указать версию и ссылку на тему форума. А то каждый раз искать по слову execute очень тоскливо
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

модуль для запуска консольных программ и получения их вывода

Post by John Doe »

Обновил viewtopic.php?p=167895#p167895
Добавил опций, исправил баги.
! Интерфейс не совместим с предыдущей версией !
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

модуль для запуска консольных программ и получения их вывода

Post by John Doe »

buniak_a_h wrote: Wed 29 Sep, 2021 16:11 Не могли бы Вы актуализировать первую запись?
Актуализировал, теперь это отдельная тема, и другое имя.
Код тоже обновил, есть изменения, не все из которых как следует протестированы, поэтому считайте что это beta.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 10855
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

модуль для запуска консольных программ и получения их вывода

Post by HaRT »

Возможно ли при использовании этого модуля получать от запускаемой программы и stdout, и stderr (притом желательно — при необходимости — по мере появления там данных)?

P.S. Предлагаю вписать в начало названия темы «sh.piper — » и готов сам это сделать. Или есть более правильное наименование?
Last edited by HaRT on Mon 15 Apr, 2024 21:55, edited 1 time in total.
Reason: Вычеркнуто сделанное
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Piper — запуска консольных программ с передачей input, и удобным доступом к output

Post by John Doe »

HaRT wrote: Mon 15 Apr, 2024 21:20 Возможно ли при использовании этого модуля получать от запускаемой программы и stdout, и stderr (притом желательно — при необходимости — по мере появления там данных)?
Именно так и есть, но следует учесть, что интерфейс адаптирован под определённые паттерны использования.
В настоящий момент stderr и stdout объединены.
HaRT wrote: Mon 15 Apr, 2024 21:20 Предлагаю вписать в начало названия темы «sh.piper — »
Я это сразу сделал, но чно-то пошло не так)
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 10855
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Piper — запуска консольных программ с передачей input, и удобным доступом к output

Post by HaRT »

John Doe wrote: Mon 15 Apr, 2024 22:01 В настоящий момент stderr и stdout объединены.
Т.е., получая из этого «русла» очередную порцию данных, нет возможности узнать, из которого потока она пришла?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Piper — запуска консольных программ с передачей input, и удобным доступом к output

Post by buniak_a_h »

John Doe wrote: Mon 15 Apr, 2024 22:01 В настоящий момент stderr и stdout объединены.
На самом деле это большой минус. Надеемся, что слова «в настоящий момент» - не для красного словца. Это - важно.
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

buniak_a_h wrote: Mon 15 Apr, 2024 22:12 Это - важно.
Теоретически да.
Но на практике я как-то за 10 лет не заметил особого интереса к модулю (и оригинальному, и этому), поэтому не уверен.

Опять же, не совсем очевидно как это лучше представить в интерфейсе.
Я бы отталкивался от практики, но пока никому не надо было, поэтому даже не думал.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by buniak_a_h »

John Doe wrote: Mon 15 Apr, 2024 23:46 пока никому не надо было
Я делал нечто вроде IDE для двух-трёх языков. Там надо было отличать stdout от stderr (вывод компилятора).
Собственно, это - единственное применение этого скрипта, которое я реализовывал.
Last edited by buniak_a_h on Mon 15 Apr, 2024 23:53, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13850
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Piper — запуск консольных программ с передачей input и удобным доступом к output

Post by John Doe »

Для простых случаев по коду возврата можно предположить когда вывод содержит сообщение об ошибке.

Если же оба потока штатно могут содержать вывод, то это другое дело.
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Полезные макросы и скрипты”