Как вернуть значение из стандартного вывода? - PullRequest
0 голосов
/ 02 февраля 2020

Я создаю REPL / оболочку в go для других языков.

У меня есть следующий код, и я ожидаю, что будет напечатано 2, но ничего не напечатано.

grepCmd := exec.Command("python")
grepIn, _ := grepCmd.StdinPipe()
grepOut, _ := grepCmd.StdoutPipe()
grepCmd.Start()
grepIn.Write([]byte("1+1"))  <- assume this is fixed and we cannot use print().
//grepIn.Write([]byte("print(1+1)")) This one returns 2
grepIn.Close()
grepBytes, _ := ioutil.ReadAll(grepOut)
grepCmd.Wait()
fmt.Println(string(grepBytes)

Я не спрашиваю, как использовать cmd.stdout = os.stdout.

1 Ответ

1 голос
/ 02 февраля 2020

Когда stdin подключен к каналу, интерпретатор python по умолчанию будет работать в неинтерактивном режиме. Таким образом, вы ничего не получите от stdout, если вы запустите echo "1+1" | python в оболочке.

Выполните python -i, чтобы явно включить интерактивный режим, как в echo "1+1" | python -i.

...