2015-12-19 25 views
6

私は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 

答えて

6

あなたは、本質的に標準出力に標準入力ティーたい:

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が使用するものだけを実装します。

関連する問題