Terminal display of input goes out of sync while/after using python? (temporary fix = `reset`)
Asked Answered
D

3

8

Every time that I run python or python3 with an interactive console, the display of the prompt gets out of sync almost immediately after the first or second interaction:

>>> [1,2,3]
>>> [1, 2, 3]
print('hi')
>>> hi

Then, when I exit out of python, this behavior carries over to bash, with the addition that when you type, nothing appears on the screen, but it will still run. In the following example, I typed date and then history | tail -n3:

$ Thu Oct  8 07:55:47 CEST 2015
$   488  python
  489  date
  490  history | tail -n3

However, after typing reset, everything goes back to normal.

Needless to say, this behavior is very annoying. What is the cause, and how can I fix it?

I am on OS X. Using iTerm or built-in Terminal.app both give the same behavior. My python builds are from macports. This problem is not present with /usr/bin/python (python 2.7.2, included with OS X).

============================

Edit: If I use zsh, then python still has problems, but everything works fine in zsh after I exit out of python.

$TERM is xterm-256color in both bash and zsh.

Decoteau answered 8/10, 2015 at 6:5 Comment(10)
Probably your python that outputs control characters and that changes the configuration of your terminal. Might be in the python banner. You can try to s=$(stty -g) before launching python and stty $s after, to save and restore the terminal configuration. But it will not help during your python interactive session...Hyphen
how do you exit python?Ahmad
@ÁlvaroGutiérrez I have tried exiting with ctrl+D and exit() and both yield the same result.Decoteau
What's your $TERM variable set to (echo $TERM)?Bandanna
@Stebalien I added $TERM to the question. It is xterm-256color.Decoteau
Please run sudo port selfupdate, sudo port upgrade outdated, python -V, python3 -V, and then echo $BASH_VERSION and post the output of the last three here. If you haven't switched your default shell to MacPorts's, then follow the instructions here before running these commands.Pondweed
@Coder256 Python 2.7.10 Python 3.4.3 4.3.42(1)-release, and behavior is the same.Decoteau
You aren't using xterm though. I assume you are setting TERM manually? Does this problem happen if you don't do that?Sheeree
@EtanReisner I do not set $TERM in my profile. Terminal.app and iTerm.app both have settings to declare the terminal type. I have never changed that setting, so I assume that xterm-256color is the most popular default. I can also declare as ansi, dtterm, nsterm, rxvt, vt52, vt100, vt102, xterm, or xterm-16color. I tried using ansi and xterm on Terminal.app and I get the same behavior.Decoteau
TERM is xterm-256color out of the box in the built-in Terminal at least on Yosemite.Ankeny
E
0

As in my answer in AskDifferent there was a bug in recent python builds under Macports when the question was written due to this Macports bug as it was not including readline (for license reasons)

This has now been fixed by making a +readline variant and making this the default

Extol answered 22/12, 2015 at 16:15 Comment(0)
R
1

Try the stty sane command in shell.

Robledo answered 22/12, 2015 at 16:6 Comment(0)
I
1

@Mark has the explanation.

As for the fix:

port selfupdate
# port install python(26|27|34|35) +readline
port install python27 +readline
Illustrational answered 23/12, 2015 at 1:23 Comment(0)
E
0

As in my answer in AskDifferent there was a bug in recent python builds under Macports when the question was written due to this Macports bug as it was not including readline (for license reasons)

This has now been fixed by making a +readline variant and making this the default

Extol answered 22/12, 2015 at 16:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.