package main
import (
"fmt""io""os"
)
func main() {
var s stringfor {
_, e := fmt.Fscan(os.Stdin, &s)
if e == io.EOF || s == "End" {
break
}
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fscan", e))
}
fmt.Printf("%s\n", s)
}
}
package main
import (
"fmt""io""os""os/exec"
)
func readPrint(r io.Reader) {
var a stringfor {
_, e := fmt.Fscan(r, &a)
if e == io.EOF || a == "End" {
break
}
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fscan", e))
break
}
fmt.Printf("%s\n", a)
}
}
func main() {
c := exec.Command("./ReadPrint.exe")
so, e := c.StdoutPipe()
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.StdoutPipe", e))
}
si, e2 := c.StdinPipe()
if e2 != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.StdinPipe", e2))
}
_, e = fmt.Fprintln(si, "test")
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fprintln", e))
}
e = c.Start()
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.Start", e))
}
_, e = fmt.Fprintln(si, "test2")
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fprintln", e))
}
si.Close()
readPrint(so)
e = c.Wait()
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.Wait", e))
}
}
package main
import (
"fmt""io""os"
)
func main() {
var s stringfor {
_, e := fmt.Fscan(os.Stdin, &s)
if e == io.EOF {
break
}
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fscan", e))
}
fmt.Fprintf(os.Stdout, "stdout[%s]\n", s)
fmt.Fprintf(os.Stderr, "stderr[%s]\n", s)
}
}
◆テストコード
package main
import (
"fmt""io""os""os/exec"
)
func readPrint(r io.Reader) {
var a stringfor {
_, e := fmt.Fscan(r, &a)
if e == io.EOF || a == "End" {
break
}
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fscan", e))
break
}
fmt.Printf("%s\n", a)
}
}
func main() {
c := exec.Command("./ReadPrint2.exe")
se, see := c.StderrPipe()
if see != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.StdoutPipe", see))
}
so, soe := c.StdoutPipe()
if soe != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.StdoutPipe", soe))
}
si, sie := c.StdinPipe()
if sie != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.StdinPipe", sie))
}
_, e := fmt.Fprintln(si, "test")
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("fmt.Fprintln", e))
}
e = c.Start()
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.Start", e))
}
si.Close()
readPrint(se)
readPrint(so)
e = c.Wait()
if e != nil {
fmt.Fprintf(os.Stderr, "%v\n", os.NewSyscallError("Cmd.Wait", e))
}
}