Перенаправление ввода с помощью python

у меня есть следующая программа для тестирования перенаправления ввода в Python.

a = int(raw_input("Enter a number: "))
b = raw_input("Enter a string: ")
print "number entered = ", a
print "string entered = ", b

если я запущу эту программу без перенаправления, вход и выход показаны ниже:

Enter a number: 100
Enter a string: sample
number entered =  100
string entered =  sample

теперь, чтобы проверить перенаправление ввода, у меня есть файл a.txt имя, которое содержит:

100
sample

однако, когда я бегу с перенаправленным входом от a.txt (как показано ниже), мои вход и выход искажаются.

python doubt02.py < a.txt
Enter a number: Enter a string: number entered =  100
string entered =  sample

пожалуйста, предложите, если у меня есть лучшая альтернатива, чтобы увидеть (с перенаправление ввода), как показано ниже:

Enter a number: 100
Enter a string: sample
number entered =  100
string entered =  sample

1 ответов


вы по существу хотите, чтобы тройник stdin в stdout:

import sys

class Tee(object):
    def __init__(self, input_handle, output_handle):
        self.input = input_handle
        self.output = output_handle

    def readline(self):
        result = self.input.readline()
        self.output.write(result)

        return result

if __name__ == '__main__':
    if not sys.stdin.isatty():
        sys.stdin = Tee(input_handle=sys.stdin, output_handle=sys.stdout)

    a = raw_input('Type something: ')
    b = raw_input('Type something else: ')

    print 'You typed', repr(a), 'and', repr(b)

на Tee класс реализует только то, что raw_input использует, поэтому не гарантируется работа для других применений sys.stdin.