Digamos que quiero ejecutar 'ls' en un programa go, y almacenar los resultados en una cadena. Parece que hay algunos comandos para bifurcar procesos en los paquetes exec y os, pero requieren argumentos de archivo para stdout, etc. ¿Hay alguna manera de obtener el resultado como una cadena?¿Cómo se obtiene el resultado de un comando del sistema en Go?
Respuesta
Uso exec.Run especificando Pipe como la salida estándar (stderr y si lo desea). Devolverá cmd, que contiene un os.File en los campos Stdout (y Stderr). Luego puede leerlo usando, por ejemplo, ioutil.ReadAll.
Ejemplo:
package main
import (
"exec";
"io/ioutil";
)
func main() {
if cmd, e := exec.Run("/bin/ls", nil, nil, exec.DevNull, exec.Pipe, exec.MergeWithStdout); e == nil {
b, _ := ioutil.ReadAll(cmd.Stdout)
println("output: " + string(b))
}
}
dos opciones, dependiendo del paradigma que prefieren:
hay una manera más fácil ahora:
package main
import (
"fmt"
"log"
"os/exec"
)
func main() {
out, err := exec.Command("date").Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf("The date is %s\n", out)
}
Dónde out
es la salida standart. Está en el formato []byte
, pero se puede cambiar fácilmente a la cadena con:
string(out)
También se puede utilizar en lugar de CombinedOutput()
Output()
que devuelve la salida estándar y el error estándar.
Probablemente esta sea la respuesta aceptada ahora. La respuesta aceptada ni siquiera compila más. –
Para obtener tanto stdout y stderr en cadenas separadas, puede utilizar tampones de bytes de este modo:
cmd := exec.Command("date")
var outb, errb bytes.Buffer
cmd.Stdout = &outb
cmd.Stderr = &errb
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Println("out:", outb.String(), "err:", errb.String())
- 1. C: ¿Ejecuta un comando del sistema y obtiene salida?
- 2. ¿Obtiene el nombre del proceso actual (ejecutable) en Go?
- 3. ¿Cómo puedo almacenar el resultado de un comando del sistema en una variable de Perl?
- 4. Ejecutando un comando del sistema en Haskell
- 5. En Python: cómo ejecutar el comando del sistema sin salida
- 6. Usando el comando del sistema en Qt
- 7. SmtpClient obtiene el resultado del servidor en el envío
- 8. ¿Cómo se ejecuta un comando en un sistema remoto en una secuencia de comandos de BASH?
- 9. ¿Cómo obtengo el resultado de un comando externo en Perl?
- 10. Cómo capturar el resultado del comando Shell en C#?
- 11. Ejecutando el comando del sistema en Vala
- 12. php: capturando el resultado del comando
- 13. Cómo se obtiene el nombre del dispositivo de un iPhone
- 14. ¿Cómo ejecutar un comando del sistema en Qt?
- 15. lectura de entrada de un comando del sistema en Haskell
- 16. Cómo esperar a que finalice el comando del sistema
- 17. vbs cómo obtener el resultado de un comando de línea de comando
- 18. ¿Cómo se obtiene la configuración de fuente predeterminada del sistema en Qt?
- 19. Usando el resultado de un comando como argumento en bash?
- 20. por qué jquery .height() obtiene un resultado diferente en Chrome?
- 21. ¿Cómo mostrar la línea de comando del vinculador en el resultado de compilación en Visual Studio?
- 22. ¿Por qué debería usar el comando GO en sybase?
- 23. ¿Cómo aplicar el comando de shell a cada línea de un resultado de comando?
- 24. cambiando el directorio desde dentro de un programa c en windows usando el comando del sistema
- 25. cómo redirigir resultado del comando time Linux a algún archivo
- 26. ¿Cómo obtengo el resultado de un comando SQL BACKUP en un programa Delphi?
- 27. Devuelve la salida del comando "sistema" en Ruby?
- 28. ¿Cómo se obtiene el tamaño de un archivo en MATLAB?
- 29. Cómo capturar el resultado de una llamada al sistema en una variable de shell?
- 30. ¿Podemos ejecutar el comando del sistema operativo desde sqlite3
No creo que el paquete "exec" ya exista. Tuve que usar "os/exec" como figura en Fatih a continuación. –