> On 5 Nov 2021, at 10:27 pm, Amit Saha <amitsaha...@gmail.com> wrote:
> 
> I have this test function:
> 
> package main
> 
> import (
>         "bufio"
>         "fmt"
>         "os"
>         "testing"
> )
> 
> func TestInput(t *testing.T) {
>         scanner := bufio.NewScanner(os.Stdin)
>         msg := "Your name please? Press the Enter key when done"
>         fmt.Fprintln(os.Stdout, msg)
> 
>         scanner.Scan()
>         if err := scanner.Err(); err != nil {
>                 t.Fatal(err)
>         }
>         name := scanner.Text()
>         if len(name) == 0 {
>                 t.Log("empty input")
>         }
>         t.Log(name)
> 
> }
> 
> When i run it via go test -v, this is what i get (TLDR; terminates without 
> waiting for the interactive input):
> 
> % go test -v
> 
> === RUN   TestInput
> 
> Your name please? Press the Enter key when done
> 
>     stdin_test.go:21: empty input
> 
>     stdin_test.go:23: 
> 
> --- PASS: TestInput (0.00s)
> 
> PASS
> 
> ok  test 0.370s
> 
> 
> 
> However, when i compile the test and then run the binary, it waits for me to 
> enter the input:
> 
> 
> 
> % go test -c
> 
> % ./test.test 
> 
> Your name please? Press the Enter key when done
> 
> 
> 
> 
> The latter behavior is more inline with what i was expecting in the first 
> case as well. 
> 
> I thought may be it has something to do with the fact that go test is 
> executing the binary (i think) after compiling, and started looking at: 
> https://github.com/golang/go/blob/c7f2f51fed15b410dea5f608420858b401887d0a/src/cmd/go/internal/test/test.go
>  , but can't see anything obvious.
> 
> Wondering if anyone of you folks have an answer?
> 

Did a bit more of experimentation, and it seems like, that’s just how 
exec.Command(“mycmd").Run() works. 

I tried with exec.Command("wc").Run() and it returns immediately as well. 
(Running the Unix “word count” program).

I suppose I am surprised since in another language I am familiar with (Python), 
a command waiting for an interactive input when executed via os/exec would 
“hang”, for example:

% python3
Python 3.8.2 (default, Apr  8 2021, 23:19:18) 
[Clang 12.0.5 (clang-1205.0.22.9)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.check_output(["wc”])

This will hang

> 
> 
> Thanks,
> 
> Amit.
> 
> 
> 
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "golang-nuts" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/golang-nuts/24pL7iQbx64/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/0f48fc8d-7e21-46a6-b736-90ea2f0bcbe6n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/25A4D3EA-F228-447C-A19E-8BE062840E20%40gmail.com.

Reply via email to