exec.Command()를 사용하여 입력 리디렉션
Go에서 입력 리디렉션을 사용하여 명령을 실행하는 것은 어려울 수 있습니다. 일반적인 명령줄 작업을 고려해보세요.
/sbin/iptables-restore < /etc/iptables.conf
이 명령은 iptables-restore가 /etc/iptables.conf에서 해당 구성을 읽도록 지시합니다. Go의 exec.Command()를 사용하여 이를 어떻게 수행할 수 있습니까?
실패한 시도
입력 파일의 경로를 인수로 전달하거나 파일 이름을 stdin으로 파이프하려는 초기 시도 실패했습니다.
// Fails cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf") // Also fails cmd := exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") // Attempt to pipe file name into stdin // Fails cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } io.WriteString(stdin, "/etc/iptables.conf")
해결책: 파일 읽기 및 쓰기 내용
명령을 성공적으로 실행하려면 먼저 /etc/iptables.conf의 내용을 읽은 다음 해당 내용을 StdinPipe()에 써야 합니다.
package main import ( "io" "io/ioutil" "log" "os/exec" ) func main() { bytes, err := ioutil.ReadFile("/etc/iptables.conf") if err != nil { log.Fatal(err) } cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } _, err = io.WriteString(stdin, string(bytes)) if err != nil { log.Fatal(err) } }
위 내용은 Go에서 입력을 exec.Command()로 리디렉션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!