Каналы и подсказки в сценариях Python CLI

Можно ли объединить конвейерный ввод и подсказки TTY в Python CLI скрипты? Например, выполнение этого:

import sys

piped_text = None

if not sys.stdin.isatty():
    piped_text = sys.stdin.read()

user_in = raw_input('Enter something: ')

if piped_text:
    sys.stdout.write(piped_text)

sys.stdout.write(user_in + '\n')  

дает следующий результат:

~: python mrprompt.py
Enter something: something
something
~: echo foo | python mrprompt.py
Enter something: Traceback (most recent call last):
  File "mrprompt.py", line 9, in <module>
    user_in = raw_input('Enter something: ')
EOFError: EOF when reading a line

Когда результат, который я ищу, будет следующим:

~: python mrprompt.py
Enter something: something
something
~: echo foo | python mrprompt.py
Enter something: something
foo
something

Я предполагаю, если сформулировать иначе, может ли подоболочка узнать tty своей родительской оболочки ? Возможно ли в Python взаимодействовать с tty родительской оболочки? Я использую bash внутри экрана GNU (поэтому чтение переменной окружения SSH_TTY нецелесообразно).

5
задан jorelli 10 June 2011 в 22:50
поделиться