49

I tried to write the output of the command php -i to the a file using php -i > info and received the following error:

output is not a tty

What does it mean?

I'm using git bash on Windows.

7
44

I found an similar topic like this. One Solution which worked for me:

Write

php.exe -i > info

instead of

php -i > info

So yust append the .exe extension to your commands and it works.

Found this solution here: https://stackoverflow.com/a/44727575/2377961

2
  • Thanks, I've been trying to figure out for a while now why this appeared to sometimes work and sometimes not, and that was the difference!
    – Chris Haas
    Feb 26 '20 at 18:50
  • 1
    the problem you're encountering is that php is a aliased to winpty php by default when running mintty. php.exe is not aliased, so it won't be launched using winpty. The aliases are setup by default because of compatibility issues, you may encounter those instead when not running winpty.
    – CervEd
    May 19 at 8:41
24

If you happen to be using winpty under the hood, you have to pass the -Xallow-non-tty argument to fix this:

$ winpty python -c 'print("hello")' | grep h
stdout is not a tty

$ winpty -Xallow-non-tty python -c 'print("hello")' | grep h
hello

However, if the output is mangled, the -Xplain argument will also be required:

$ winpty -Xallow-non-tty python -c 'print("hello")' | xxd
00000000: 1b5b 306d 1b5b 304b 6865 6c6c 6f1b 5b30  .[0m.[0Khello.[0
00000010: 4b1b 5b3f 3235 6c0d 0a1b 5b30 4b1b 5b3f  K.[?25l...[0K.[?
00000020: 3235 68                                  25h

$ winpty -Xallow-non-tty -Xplain python -c 'print("hello")' | xxd
00000000: 6865 6c6c 6f0d 0a                        hello..
5
  • 1
    Solved the issue for me when using node through conemu.
    – jakub.g
    Sep 19 '18 at 15:32
  • Thank you so much...This worked for me. Oct 29 '19 at 23:03
  • 2
    This one should be accepted as the correct solution
    – http8086
    Feb 20 '20 at 2:32
  • it's a winpty error, git-bash sets up aliases for node ipython php php5 psql python2.7 to use winpty in the script /etc/profile.d/aliases.sh
    – CervEd
    May 19 at 8:35
  • just logged in to upvote this. With default docker desktop install and git for windows, I can now run docker exec -it from a script with the docker command defined as : DOCKER_COMMAND='winpty -Xallow-non-tty -Xplain docker' Thanks a lot! Note that the options are not needed on the command line in a shell, but apparently inside a script it does. May 21 at 12:17
23

What worked for me, based on Peh's comments to stackoverflow.com/questions/33622087

If you use C:\Program Files\Git\bin\bash.exe instead of C:\Program Files\Git\git-bash.exe then the command works fine

3
  • 3
    This didn't work for me. I get the same error.
    – Ryan
    Jan 20 '17 at 15:07
  • 1
    But it worked for me today! I don't know why it didn't work a few months ago. +1
    – Ryan
    Apr 3 '17 at 23:37
  • 2
    just type bash inside git bash
    – Rivenfall
    Jul 5 '19 at 12:06
3

I believe this issue is more about how Git Bash handles piping, and less about PHP, because I encountered the same symptom using Python on Windows. The currently most-voted answer does not work for me. It might work a few months later, based on this comment and a follow-up comment. But I'm impatient so I choose to use the native Windows Command Prompt and, voila, it works!

DOESN'T WORK in Git Bash

rayluo@DESKTOP-10B0N4G MINGW64 ~
$ python -c "print('hello world')" > test.txt
stdout is not a tty

WORKS in Command Prompt

(env27) C:\Users\rayluo>python -c "print('hello world')" > test.txt
(env27) C:\Users\rayluo>type test.txt
hello world
1

You are redirecting you output from your terminal (tty) to a file. Therefore your output is no longer a tty.

The message makes perfect sense. However this should not be an error.

I cannot reproduce this behavior on a linux system.

1
  • Sorry, i did comment on the wrong place. please run "strace php -i" and paste the output (last few lines at first).
    – gerhard d.
    Dec 10 '15 at 10:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.