Giả sử tôi muốn chạy 'ls' trong một chương trình đi, và lưu trữ kết quả trong một chuỗi. Có vẻ như có một vài lệnh để xử lý ngã ba trong các gói exec và os, nhưng chúng yêu cầu đối số tệp cho stdout, v.v. Có cách nào để lấy kết quả đầu ra dưới dạng chuỗi không?Làm thế nào để bạn nhận được đầu ra của một lệnh hệ thống trong Go?
Trả lời
Sử dụng exec.Run bằng cách xác định Pipe như stdout (và stderr nếu bạn muốn). Nó sẽ trả về cmd, có chứa một số os.File trong các trường Stdout (và Stderr). Sau đó, bạn có thể đọc nó bằng cách sử dụng ví dụ ioutil.ReadAll.
Ví dụ:
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))
}
}
Hai tùy chọn, tùy thuộc vào mô hình mà bạn thích:
Có một cách dễ dàng hơn bây giờ:
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)
}
đâu out
là sản phẩm standart. Đó là trong các định dạng []byte
, nhưng bạn có thể thay đổi nó thành chuỗi một cách dễ dàng với:
string(out)
Bạn cũng có thể sử dụng CombinedOutput()
thay vì Output()
trả về đầu ra tiêu chuẩn và sai số chuẩn.
Điều này rất có thể là câu trả lời được chấp nhận ngay bây giờ. Câu trả lời được chấp nhận thậm chí không biên dịch nữa. –
Để có được cả stdout và stderr thành chuỗi riêng biệt, bạn có thể sử dụng bộ đệm byte như vậy:
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. Gán đầu ra của lệnh hệ thống thành biến
- 2. Làm thế nào để chuyển hướng đầu ra của hệ thống() vào một tệp?
- 3. Nhận lệnh đầu ra của hệ thống trong chương trình C
- 4. Làm thế nào để gửi đầu ra theo dõi tới một tệp trong hệ thống tệp?
- 5. Quay lại đầu ra từ lệnh "hệ thống" trong Ruby?
- 6. Filehandle cho Đầu ra từ Lệnh Hệ thống trong Perl
- 7. cửa hàng đầu ra của lệnh hệ thống vào một biến trong r
- 8. Làm thế nào để bạn thực hiện một lệnh trên hệ thống từ xa để chèn mã BASH?
- 9. Làm thế nào để ống một số lệnh trong Go?
- 10. cách ẩn đầu ra hệ thống()
- 11. Làm thế nào để sử dụng đúng hệ thống() để thực hiện một lệnh trong C++?
- 12. Làm thế nào để lệnh "godoc" hoạt động trên hệ thống của tôi? .
- 13. Làm thế nào để nắm bắt được kết quả của một cuộc gọi hệ thống trong một biến hệ vỏ?
- 14. Làm thế nào để bạn đánh dấu mã là không được chấp nhận trong Go?
- 15. Làm thế nào để bạn xác định số lượng RAM hệ thống Linux trong C++?
- 16. Làm cách nào để bạn nhận được cài đặt Phông chữ mặc định của Hệ thống trong Qt?
- 17. Làm thế nào để gán đầu ra của lệnh Bash cho một biến?
- 18. làm thế nào để có được đầu ra của một lệnh khi sử dụng Microsoft nmake?
- 19. làm thế nào để có được asl_log xuất hiện trong đầu ra giao diện điều khiển hệ thống iOS?
- 20. Làm thế nào để bạn nhận được phông chữ hệ thống mặc định trong khung công tác .NET.
- 21. Làm thế nào để bạn nhận được một unsigned dài ra khỏi một chuỗi?
- 22. Làm thế nào để áp dụng lệnh shell cho mỗi dòng của một đầu ra lệnh?
- 23. Làm thế nào để chạy một lệnh hệ thống trong Qt?
- 24. Làm thế nào để bạn tích hợp thử nghiệm hệ thống vào một quy trình nhanh?
- 25. Nơi để tìm đầu ra của "hệ thống ra" trong Intellij IDE?
- 26. C# làm thế nào bạn có thể nhận được đầu ra của một tập tin thực thi khác?
- 27. Làm thế nào để bạn kết hợp các thẻ trên một hệ thống đã tồn tại
- 28. Làm thế nào để bạn có được kích thước phông chữ mặc định của hệ thống trong Qt?
- 29. Làm thế nào để có được đầu ra của một lệnh được chạy bởi QProcess trong PySide?
- 30. Làm cách nào để có được vị trí hệ thống tệp của tập lệnh PowerShell?
Tôi không nghĩ rằng gói "exec" tồn tại nữa. Tôi đã phải sử dụng "os/exec" như được liệt kê bởi Fatih dưới đây. –