2015-12-19 15 views
6

Mam następujący program do testowania przekierowania wejścia w Pythonie.Przekierowanie wejścia za pomocą pythona

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

Jeśli uruchomić ten program bez przekierowania, wejście i wyjście są przedstawione poniżej:

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

Teraz, aby przetestować przekierowanie sygnału wejściowego, Mam plik a.txt nazwie, który zawiera:

100 
sample 

Jednak, gdy uruchamiam z wejściem przekierowanym z a.txt (jak poniżej), moje wejście i wyjście zostaje zniekształcone.

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

Proszę zasugerować jeśli mam lepszą alternatywę widzieć (z przekierowaniem wejściowego), jak poniżej:

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

Odpowiedz

6

można zasadniczo chcą tee stdin do 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 class implementuje tylko to, co używa raw_input, więc nie gwarantuje się, że będzie działać dla innych zastosowań sys.stdin.

Powiązane problemy