Usare lua os.eseguire in windows per avviare un programma con un flash di CMD

Sono lieto di lanciare un programma in un sistema windows da Lua utilizzando

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

Questo funziona correttamente, lanciare il programma e lo script di finitura.
Come mai si accende una finestra di comando per una frazione di secondo, se uno ha una strada da Lua per il lancio di un programma.

  • Cosa succede se si basta eseguire strProgram invece di strCmd? In altre parole, non si ha realmente bisogno il start?
  • Il Comando finestra rimane aperta per tutto il tempo che è stata lanciata l’esecuzione del programma e il Lua script si blocca fino a quando il programma è stato chiuso.
  • Dai documenti, sembra che essi sono in esecuzione attraverso la shell del sistema operativo (mi dispiace, io sono su Linux e così l’ho potuto testare io stesso). A meno che qualcuno non sa Lua trucco, potrebbe essere necessario scrivere una propria funzione nella lingua del paese ospitante (ad esempio C) che fa un fork/exec invece di system di chiamata e di esportazione delle API a Lua.
InformationsquelleAutor Jane T | 2011-06-15

 

3 Replies
  1. 7

    Lua os.eseguire il comando è basato sulla libreria standard C “shell” funzione. In Windows, questa funzione crea sempre una finestra di comando, e sarà sempre fermare il processo corrente fino a quando la finestra finiture. Quest’ultimo avviene anche in Linux.

    C’è, in definitiva, alcun modo per aggirare questo. Non attraverso il Lua API standard. Perché Lua deve essere leggero e indipendente dalla piattaforma, l’API non è consentito l’uso di OS-dipendente Api native.

    La vostra scommessa migliore sarebbe usare il Lua Ex-Api modulo. Si tratta in effetti di abandonware, e potrebbe essere necessario patch fino a qualche compilatore problemi (sto cercando di indovinare il port per Windows non era la loro prima priorità). Ma è un buon modo per generare processi. Si può scegliere di aspettare fino a quando non termina se stessi, o di far loro eseguire in parallelo. E non lanciare in alto una finestra del prompt dei comandi, a meno che l’applicazione utilizza uno.

    • Grazie per questo, ho paura che sembra un po ‘ oltre il mio set di abilità, passerò la persona il cui software è Lua e vedere se è possibile aggiungere una funzione per me e io punto lui in quel codice, se ne ha bisogno.
    • Io credo che c’è almeno un modo per eseguire un comando senza la console popping up su windows senza alcun biblioteca, utilizzando io.popen. Si prega di vedere la mia risposta.
  2. 1

    Questo è il pezzo di codice che ho usato per chiamare un lotto da Lua, forse aiutare.
    In win console (prompt dei comandi) aprire ed eseguire, stesso in 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 
  3. 0

    Questo è un modo per eseguire un comando senza una finestra di console utilizzando solo il Lua API standard (vale a dire di no librerie extra). Testato su Win7 x64.

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

    Edit: vedi commenti qui sotto, potrebbe non funzionare per tutti. Non sono sicuro del perché.

    • Negativo, Win7 64 bit e si comporta come con un solo popen o di esecuzione (Lua 5.2.3, collegate)
    • C’è ovviamente qualcosa di diverso sulle nostre configurazioni di allora. Sto usando questo codice quasi ogni giorno in un sistema di generazione e non ho alcun comando di windows popping up a tutti.
    • non dubitare di te, basta preparare altri che questo potrebbe non funzionare nonostante il tuo successo.
    • certo, ho aggiunto un avviso per il mio post così.

Lascia un commento