Lua os.execute return value
I just want to achieve this: whenever os.execute returns any value, I would like to use it in Lua — for example echo ‘test’ will output test in the bash command line — is that possible to get the returned value ( test in this case) to the Lua local variable?
1,083 4 4 gold badges 22 22 silver badges 42 42 bronze badges
asked Mar 12, 2012 at 23:10
15k 23 23 gold badges 84 84 silver badges 114 114 bronze badges
5 Answers 5
You can use io.popen() instead. This returns a file handle you can use to read the output of the command. Something like the following may work:
local handle = io.popen(command) local result = handle:read("*a") handle:close()
Note that this will include the trailing newline (if any) that the command emits.
answered Mar 12, 2012 at 23:18
Lily Ballard Lily Ballard
183k 34 34 gold badges 384 384 silver badges 348 348 bronze badges
Getting this message: ‘popen’ not supported .
Mar 13, 2012 at 0:40
@Cyclone: According to the manual, «This function is system dependent and is not available on all platforms». What platform are you trying this on? The only workaround I can think of given the available functions is to use os.execute() but redirect standard output to a known temporary file, and then read the temporary file afterwards.
Mar 13, 2012 at 0:41
I’m using FreeBSD 8.2. About your second suggestion — could you give me some example of how it should look like? And how about the performace? Its a lot of writing/reading.
Mar 13, 2012 at 2:48
@Cyclone: Something like os.execute(command .. » >/tmp/foo») (where /tmp/foo is replaced by an actual somewhat unique path, however you want to calculate it).
Mar 13, 2012 at 3:16
Could I do the opposite of what the question asks? Return a Lua value in the os shell.
Jun 26, 2020 at 14:05
function GetFiles(mask) local files = <> local tmpfile = '/tmp/stmp.txt' os.execute('ls -1 '..mask..' > '..tmpfile) local f = io.open(tmpfile) if not f then return files end local k = 1 for line in f:lines() do files[k] = line k = k + 1 end f:close() return files end
answered Oct 29, 2012 at 2:44
57 1 1 silver badge 2 2 bronze badges
If supported on your system, io.popen is better suited for this use-case than os.execute . The later only returns the exit status not the output.
-- runs command on a sub-process. local handle = io.popen('cmd') -- reads command output. local output = handle:read('*a') -- replaces any newline with a space local format = output:gsub('[\n\r]', ' ')
local handle = io.popen('date +"%T.%6N"') local output = handle:read('*a') local time = output:gsub('[\n\r]', ' ') handle:close() print(time .. 'DEBUG: Time recorded when this event happened.')
Звук Lua в фоновом режиме
Для участия в обсуждениях и оформления подписки на новые сообщения форума вам необходимо зарегистрироваться.
Страницы: 1
Cообщений на странице:
Звук Lua в фоновом режиме
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 11:58:16
Тема звука в фоновом режиме по прежнему актуальна.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 13:44:32
Нашел на форуме » start /i /min /b «:
os.execute ('start /i /min /b C:\\VideoLAN\\VLC\\vlc.exe -I dummy --dummy-quiet C:\\windows\\media\\tada.wav');
Но хотелось бы также что бы можно было остановить звук.
То получается могут проигрываться два параллельны звука.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 13:46:12
os.execute ( 'start /i /min /b C:\\VideoLAN\\VLC\\vlc.exe -I dummy --dummy-quiet C:\\windows\\media\\tada.wav' );
-- /i Передает начальные установки среды интерпретатора Cmd.exe в новое окно командной строки. -- /min Запускает новое окно командной строки в свернутом виде. -- /b Запускает приложение без открытия нового окна командной строки. Обработка комбинации клавиш CTRL+C не производится, пока приложение не разрешит обработку CTRL+C. Для прерывания приложения следует использовать CTRL+BREAK.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 1359 Регистрация: 21.08.2015
09.05.2020 14:01:40
Вот держите . Положить луа и длл в одну папку с вашим скриптом, включить файл qPlaySound через require, вызывать функцию qPlaySound(filename). Пример
require "qPlaySound" local run = true function main() while run do sleep(3000) qPlaySound("c:\\windows\\media\\tada.wav") end end function OnStop() run = false end
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 14:15:58
Пример очень хороший, но посмотреть бы что внутри этой dll-библиотеки, т.к. не нашел в сети иинформации по ней.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 1359 Регистрация: 21.08.2015
09.05.2020 14:24:13
| Цитата |
|---|
| Иван написал: не нашел в сети иинформации по ней. |
И не найдете, я ее только что спешл фор ю слепил. Что внутри можно посмотреть дизасмом, ежли паранойка. Там очень мало чего.
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 14:29:01
| Цитата |
|---|
| Иван написал: не нашел в сети иинформации по ней. |
Можно пожалуйста сюда исходный код выложить.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 14:33:43
| Цитата |
|---|
| Anton написал: qPlaySound(«c:\\windows\\media\\tada.wav») |
69: attempt to call a nil value «package.loadlib(getScriptPath() .. «\\qPlaySound.dll», «qload»)();»
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 1359 Регистрация: 21.08.2015
09.05.2020 14:41:55
Версия квика меньше 8.5, полагаю? Собрано под 8.5, с новым луа.
Пользователь
Сообщений: 1359 Регистрация: 21.08.2015
09.05.2020 14:48:50
Пользователь
Сообщений: 1359 Регистрация: 21.08.2015
09.05.2020 14:56:27
| Цитата |
|---|
| Иван написал: исходный код |
Всегда забавляет, когда люди внимательно изучают сорцы на гитхабе, а потом скачивают готовый бинарник с какого-то левого сайта. Почему они считают, что бинарник собран именно из тех сорцев, что им показали, для меня загадка. Впечатляющий прорыв творческой мысли, не правда ли?
static int qPlaySound(lua_State * s)
Пользователь
Сообщений: 136 Регистрация: 08.05.2020
09.05.2020 15:14:19
Да это забавно — согласен.
Речь была не про это — а про то, что бы посмотреть. У меня он так и не запустился.
Единственная библиотека которую я смог запустить для звуков это w32.dll.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Пользователь
Сообщений: 1359 Регистрация: 21.08.2015
09.05.2020 15:19:38
| Цитата |
|---|
| Иван написал: У меня он так и не запустился. |
Так а версию квика-то назовите, может у вас вообще седьмая какая-нибудь. Скрипт qPlaySound.lua должен лежать рядом с вашим скриптом и рядом же должна лежать qPlaySound.dll.
lua: os.execute с параметрами
Очень нужен example как в lua скрипте выполнить команду и передать параметры, взятые из переменной. Например, создать папку, а имя папки взять из ранее указанной переменной. Используя os.execute(). У меня либо не берется никакое значение, либо принимается имя переменной, но не ее значение. В интернетах синтаксис скудно описан по это команде. Все что смог нарыть попробовал, но ничего не работает. Спасибо!

kerby ★
17.08.17 10:39:37 MSK
Использование функции os.execute без показа окна windows cmd
Для участия в обсуждениях и оформления подписки на новые сообщения форума вам необходимо зарегистрироваться.
Страницы: 1
Cообщений на странице:
Использование функции os.execute без показа окна windows cmd
Пользователь
Сообщений: 1519 Регистрация: 30.01.2015
10.11.2015 12:55:02
| Цитата |
|---|
| Владимир Ишанин пишет: Суть в том, что функция os.execute вызывает командную строку и затем открывает файл. Целесообразно было бы спрятать\скрыть это окно, чтобы не портило общую картину. Кто-нибудь сталкивался с этой проблемой? Как ее можно решить? В гугле решение проблемы не нашел. |
В качестве временного решения
os.execute («start /I /MIN /B program.exe»)
Пользователь
Сообщений: 645 Регистрация: 30.01.2015
Роботорговец
10.11.2015 15:53:59
Это работает, только если нам не важен код возврата приложения?
Надо делать так, как надо. А как не надо — делать не надо.
Пользователь
Сообщений: 452 Регистрация: 20.04.2016
18.11.2016 13:46:16
| Цитата |
|---|
| s_mike@rambler.ru написал: os.execute («start /I /MIN /B program.exe») |
Подскажите, а разве при этом само ДОС окно у вас запускается минимизированным?
Пользователь
Сообщений: 1519 Регистрация: 30.01.2015
18.11.2016 19:21:06
| Цитата |
|---|
| s_mike@rambler.ru написал: os.execute («start /I /MIN /B program.exe») |
у вас же есть компьютер с командной строкой. Что мешает поэкспериментировать?
Пользователь
Сообщений: 645 Регистрация: 30.01.2015
Роботорговец
19.11.2016 10:01:04
| Цитата |
|---|
| Sergey Denegin написал: Подскажите, а разве при этом само ДОС окно у вас запускается минимизированным? |
Нет.
Команда start помогает ДОС-окну закрыться до завершения приложения program.exe. Но ключ /MIN не помогает: ДОС-окно всё-равно мелькает на экране.
Надо делать так, как надо. А как не надо — делать не надо.
Пользователь
Сообщений: 199 Регистрация: 31.01.2015
19.11.2016 11:26:55
Может как-то через .pif-файл можно настроить для запускаемой программы.
Пользователь
Сообщений: 1519 Регистрация: 30.01.2015
19.11.2016 15:19:40
Проще всего создать внешнюю библтотеку с этой функцией.
Или взять готовую. Можно вытряхнуть из архива http://www.bot4sale.ru/download-categories/2012-06-13-15-10-36/item/market-scaner.html библиотеку bot4sale.dll
bot4sale.Shell(string file,string parameters,string directory,number show)
show:
define(`SW_HIDE’, 0) # Hides the window and activates another window.
define(`SW_SHOWNORMAL’, 1) # Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
define(`SW_SHOWMINIMIZED’, 2) # Activates the window and displays it as a minimized window.
define(`SW_SHOWMAXIMIZED’, 3) # Activates the window and displays it as a maximized window.
define(`SW_MAXIMIZE’, 3) # Maximizes the specified window.
define(`SW_SHOWNOACTIVATE’, 4) # Displays a window in its most recent size and position. The active window remains active.
define(`SW_SHOW’, 5) # Activates the window and displays it in its current size and position.
define(`SW_MINIMIZE’, 6) # Minimizes the specified window and activates the next top-level window in the z-order.
define(`SW_SHOWMINNOACTIVE’, 7) # Displays the window as a minimized window. The active window remains active.
define(`SW_SHOWNA’, 8) # Displays the window in its current state. The active window remains active.
define(`SW_RESTORE’, 9) # Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when restoring a minimized window.
define(`SW_SHOWDEFAULT’, 10) # Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
возвращает код ошибки или 0
Пользователь
Сообщений: 1696 Регистрация: 01.02.2015
19.11.2016 15:42:41
- Посылка оконных сообщений ЛЮБОМУ окну QUIK,
является НЕзаконным методом использования системы QUIK и в частности её плагина QLUA со всеми вытекающими.
Если я НЕправ — прошу разработчиков QUIK — прокомментировать.
Пользователь
Сообщений: 17 Регистрация: 09.03.2019
29.05.2022 18:44:51
а равно и созданному в системе QUIK и QLUA
а равно и использование библиотек, использующих функции WINAPI прямо НЕ описанные в документации к системе QUIK
а равно — распространение их ЛЮБЫМ способом в интернете БЕЗ явно указанного на то согласия разработчиков системы QUIK
является НЕзаконным методом использования системы QUIK и в частности её плагина QLUA со всеми вытекающими.