Chcę, aby mój program Python pobierał dane wejściowe z potoku, a następnie pobierał dane wejściowe z terminala. Po przeczytaniu this SO post, próbowałem otworzyć/dev/tty, aby zastąpić sys.stdin.Python: Jak korzystać z readline GNU, gdy wartość sys.stdin została zmieniona?
import sys
import readline
def tty_input(prompt):
with open("/dev/tty") as terminal:
sys.stdin = terminal
user_input = input(prompt)
sys.stdin = sys.__stdin__
return user_input
Problem z tego podejścia jest to, że GNU readline nie działa, gdy sys.stdin! = Sys .__ stdin__. Nie mogę używać klawiszy strzałek do przesuwania kursora ani nawigacji po historii. Przeczytałem łatkę dotyczącą tego problemu, który został zgłoszony here, ale domyślam się, że nic z tego nie wyszło.
Jeśli istnieje sposób akceptacji danych wejściowych z potoku i terminala bez zmiany wartości sys.stdin, jestem otwarty na sugestie.
Zobacz również ten raport o błędzie: http://bugs.python.org/msg286521 – src