Используйте lua os.execute в windows для запуска программы без прошивки CMD - PullRequest
8 голосов
/ 15 июня 2011

Я с удовольствием запускаю программу в системе Windows из Lua, используя

strProgram = '"C:\\Program Files\\Ps Pad\\PSPad.exe"'
strCmd = 'start "" '..strProgram
os.execute(strCmd)

Это работает правильно, запуск программы и завершение скрипта. Как бы то ни было, он мигает в окне команд на долю секунды, есть ли у кого-нибудь способ из Lua запустить программу.

Ответы [ 3 ]

7 голосов
/ 16 июня 2011

Команда Lua os.execute основана на функции "shell" стандартной библиотеки C.В Windows эта функция всегда создает командное окно и всегда останавливает текущий процесс, пока окно не завершится.Последнее также происходит в Linux.

В конечном счете, нет пути к этому.Не через стандартный API Lua.Поскольку Lua должен быть легковесным и независимым от платформы, API не может использовать собственные API-интерфейсы, зависящие от ОС.

Лучше всего было бы использовать модуль Lua Ex-Api ,Это фактически заброшенное ПО, и вам может потребоваться исправить некоторые проблемы с компилятором (я думаю, порт Windows не был их первым приоритетом).Но это достаточно хороший способ порождать процессы.Вы можете подождать, пока он не завершит себя, или позволить им работать параллельно.И оно не откроет окно командной строки, если только само приложение не использует его.

1 голос
/ 08 октября 2016

Это кусок кода, который я использую для вызова пакета из Lua, может быть, помочь. В консоли win (командная строка) откройте и выполните то же самое в unix (mac | nix)

-- sBatchFile = .bat for windows, .sh for x
function vfFork2(sBatchFile)
    local b = package.cpath:match("%p[\\|/]?%p(%a+)")
    if b == "dll" then 
        -- windows
        os.execute('start cmd /k call "'..sBatchFile..'"')
    elseif b == "dylib" then
        -- macos
        os.execute('chmod +x "'..sBatchFile..'"')
        os.execute('open -a Terminal.app "'..sBatchFile..'"')
    elseif b == "so" then
        -- Linux
        os.execute('chmod +x "'..sBatchFile..'"')
        os.execute('xterm -hold -e "'..sBatchFile..'" & ')
    end 
end 
0 голосов
/ 15 апреля 2015

Это способ запустить команду без окна консоли, используя только стандартный API Lua (т.е. без дополнительных библиотек). Протестировано на Win7 x64.

function exec_silent(command)
    local p = assert(io.popen(command))
    local result = p:read("*all")
    p:close()
    return result
end

Изменить: см. Комментарии ниже, это может не работать для всех. Я не уверен почему.

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