javanix
javanix

Reputation: 1330

How to check if raw_input() came from keyboard in Python

I have a Python script that needs to suppress the echo of stdin that happens when you use the keyboard to respond to a prompt.

When using the keyboard, I can use VT100 control codes to move up one line, clear the line, and then move up another line (so that the output clears the newly-blanked line).

However, this code messes up the output and ends up clearing a line of valid output when the input comes from a file (ie, cat test | myscript.py, because stdin does not apparently echo anything to stdout in this case.

I can't control how the input is sent to the script, and I don't know whether the user will use the keyboard or files.

Is there any way for me to check the output of raw_input() and only run the VT100 control codes if the input came from the keyboard?

Upvotes: 3

Views: 985

Answers (2)

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798526

"... suppress the echo of stdin ..."

Here’s a function that prompts for a password with echoing turned off...

Upvotes: 1

The function that you want is isatty ("is a TTY") on filehandles. You can test it on sys.stdin, sys.stdout or sys.stderr as you need.

>>> import sys
>>> sys.stdin.isatty()
True

Incidentally, that is what Python is doing too to detect whether or not to show the interactive prompt (just try cat | python)

Upvotes: 7

Related Questions