Cuando hago un "os.execute" en Lua, una consola aparece rápidamente, ejecuta el comando y luego se cierra. Pero, ¿hay alguna forma de recuperar la salida de la consola solo con las bibliotecas Lua estándar?Obtenga la salida de os.execute en Lua
Respuesta
Creo que quiere este http://pgl.yoyo.org/luai/i/io.popen io.popen. Pero no siempre es compilado en
No sé sobre Lua específicamente, pero en general se puede ejecutar un comando como:
comd >comd.txt 2>&1
capturar la salida y el error a la comd.txt archivo, a continuación, utilizar el archivo de idiomas funciones de E/S para leerlo.
Así es como lo haría si el idioma en sí no proporcionara la captura de la producción estándar y el error.
Esto es específico de Windows pero es un método que he resuelto para mí. Un ejemplo de cadena de comando completa pasada para ejecutar es "cmd.exe/c c: \ pathtoit \ someprogram.exe -arg1 somefile> c: \ temp \ out.txt 2> & 1". La parte 2> fue el truco para mí. – jdr5ca
Esto no es específico de Windows. También funcionará en Unix, Linux, BSD, OS X y muchos otros sistemas. No soy el mayor fan de los archivos temporales frívolos, así que no me gusta este enfoque, aunque técnicamente funciona. La parte '2> & 1' redirige el error estándar (salida 2) a la salida estándar (salida 1), que ya fue redirigido a comd.txt ('> 'es una abreviatura de' 1> ') –
Si ha io.popen, entonces esto es lo que yo uso:.
function os.capture(cmd, raw) local f = assert(io.popen(cmd, 'r')) local s = assert(f:read('*a')) f:close() if raw then return s end s = string.gsub(s, '^%s+', '') s = string.gsub(s, '%s+$', '') s = string.gsub(s, '[\n\r]+', ' ') return s end
Si usted no tiene io.popen, entonces presumiblemente popen (3) no es disponible en su sistema, y usted está en yogur profundo. Pero todos los puertos Lua de unix/mac/windows tendrán io.popen.
¿Tiene un ejemplo de cómo para usar lo anterior? – starbeamrainbowlabs
Lo usé para obtener el porcentaje de energía restante para algún software propietario de UPS 'local curPercent = os.capture (" sudo pwrstat -status | grep 'Capacidad de la batería' | cut -d '' -f 3 ", falso) - asegúrese de tener una regla en/etc/sudoers para ejecutar este pwrstat sin contraseña (NOPASSWD) ' Tengo la segunda opción de la función os.capture anterior establecida en' false' para que se elimine la nueva línea que normalmente obtener. – Logg
- 1. os.execute sin heredar de los padres FDS
- 2. Django: obtenga la salida de HTML en una variable
- 3. Java - Obtenga la salida de sonido de la computadora actual
- 4. Uso os.execute lua en las ventanas para poner en marcha un programa con un destello de CMD
- 5. Habilitar color de salida bash con script Lua
- 6. Obtener el estado de retorno Y la salida del programa
- 7. Lua imprimir en la misma línea
- 8. Código de sangría Lua en Lua
- 9. Concatenación de cadenas en Lua
- 10. Obtenga la salida de un programa C en una variable en otro programa C
- 11. Lua, ¿qué es Lua?
- 12. Lua Lanes: intentar indexar 'os' globales (un valor nulo)
- 13. mesa dentro de la tabla en Lua
- 14. python: obtenga la salida de impresión en una declaración del ejecutivo
- 15. Lua - inicializando
- 16. lua dividir en palabras
- 17. Incrustar Lua en C++
- 18. Lua - ¿Cómo hacer la internacionalización?
- 19. Sandboxing en Lua 5.2
- 20. ¿Cuerda partida en Lua?
- 21. Wirshark Disector en Lua
- 22. Lua en el iPhone
- 23. Multithreading en Lua
- 24. Lua en el iPhone?
- 25. programación en Lua, objetos
- 26. Solicitud de https en lua
- 27. Incrustar Lua en C++
- 28. Para Loop en Lua
- 29. Ejecute un comando python dentro de vim y obtenga la salida
- 30. Instalación de la biblioteca de socket Lua
gracias por preguntar esto, me preguntaba lo mismo hoy –