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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

сам модуль:
execute_v2.7z
(2.32 KiB) Downloaded 543 times
пример, как можно скомпилировать программу на c++ при помощи gcc и если есть ошибки — перейти к месту их обнаружения:

 ! Message from: John Doe
Альтернативная версия модуля, с дополнительными функциями, см. тут: viewtopic.php?p=167895#p167895
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Как всегда - красиво.

Придирки по мелочам:
1. В модуле можно просто сделать return Execute, не нужно создавать 2 таблицы.
2. В макросе можно задать filemask="*.cpp".
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

Shmuel wrote:1. В модуле можно просто сделать return Execute, не нужно создавать 2 таблицы.
что-то я затупил на тему того, что модуль должен возвращать таблицу :?

всё поправил.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

В длинных строках паттерны с дублированными обратными слешами не будут матчиться.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

AleXH wrote:В длинных строках паттерны с дублированными обратными слешами не будут матчиться.
например?
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

проверил - был не прав
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

AleXH wrote:имхо из-за длинных строк слеши должны быть одинарными.
должны, но работать будет и так.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

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

Post by fml2 »

По-моему, имя переменной "readed" неправильно с точки зрения английской грамматики. Правильно было бы "read". Или это такой программистский сленг? Я знаю, что в программах инога специлаьно пишут "setted", желая подчеркнуть, что это именно прошедшее время от "set". Но с "read" я такого еще не встречал.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Патч, сокращает модуль на 15 строк.
patch.1.7z
(636 Bytes) Downloaded 285 times
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Можно сократить ещё, т.к. структура SECURITY_ATTRIBUTES уже определена в winapi.lua

И насколько я понимаю, структуры можно полностью (либо частично) инициализировать прямо в конструкторе:

Code: Select all

  local pipe_security=ffi.new("SECURITY_ATTRIBUTES")
  pipe_security.nLength=ffi.sizeof(pipe_security)
  pipe_security.bInheritHandle=true
Это же можно записать так: local pipe_security=ffi.new("SECURITY_ATTRIBUTES",ffi.sizeof("SECURITY_ATTRIBUTES"),nil,true)
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Модуль покритикую.
Код конечно хорошо, но в шапке можно было бы и разжевать интерфейс функции Execute.
Саму функцию (раз уж это модуль) стоило бы сделать более универсальной, сейчас например никак не обрабатываются ошибки запуска.

P.S.
А вообще стоило бы добавить в LuaFAR юникодный аналог io.popen.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

John Doe wrote:А вообще стоило бы добавить в LuaFAR юникодный аналог io.popen.
Можно взглянуть на пример "неюникодности" io.popen в LuaFAR?
tstr
Posts: 557
Joined: Thu 16 Apr, 2009 16:15
Has thanked: 20 times
Been thanked: 9 times

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

Post by tstr »

При запуске через Execute "доходит" ли до процесса CtrlC/CtrlBreak ?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

tstr wrote:При запуске через Execute "доходит" ли до процесса CtrlC/CtrlBreak ?
да.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Shmuel wrote:Можно взглянуть на пример "неюникодности" io.popen в LuaFAR?
Был не прав, перепутал с функциями os.*
В таком случае в чём преимущество обсуждаемой тут реализации Execute перед стандартной io.popen?
Post Reply

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