ファイルから入力をリダイレクトしますが、stdoutにも表示しますか?

ファイルから入力をリダイレクトしますが、stdoutにも表示しますか?

<演算子を使用してファイルの入力をリダイレクトできます。したがって、次のようなPythonスクリプトがある場合:

name = input("Enter your name: ")
print("Hello", name)

その後、入力を次のファイルに入れることができます。

Bob

次に、次のように実行します。

$ python program.py < input.txt

これを行うと、出力は次のようになります。

What is your name? Hello  Bob

入力したテキストが画面に表示され、正常に実行されるプログラムのように見えるようにする方法はありますか?上記の例では、次のようになります。

What is your name? Bob
Hello Bob

私がこれをしたいのは、コード例を含む本を書いていて、自動的にプログラムを実行し、結果が本に表示されるようにするからです。これが可能かどうかはわかりませんが、プログラムを作成し、入力ファイルを設定し、残りは自動的に実行できるため、プロセス全体が簡単になります。

読んでくれてありがとう!

答え1

使用できるexpect与えられた入力ファイルを与えられたPythonスクリプトに供給するスクリプト:

イアン。期待事項:

set script [lindex $argv 0]
set input  [lindex $argv 1]
set inputfh [open $input r]
spawn -noecho python $script
while {[gets $inputfh line] != -1} {
  expect {
    -re "(.+)" {
        send "$line\n"
    }
  }
}
close $inputfh
interact

ian.py:

name = input("Enter your name: ")
print("Hello", name)

入力.txt:

"Jeff"

与えられた入力ファイルを使って与えられたPythonスクリプトを実行するには:

expect -f ian.expect ian.py input.txt

あなたは得るでしょう:

$ expect -f ian.expect ian.py input.txt
Enter your name: "Jeff"
('Hello', 'Jeff')

私はTCLやExpectハッカーではないので、このスクリプトの改善を歓迎します。

2つの入力を含むサンプルファイルとスクリプト:

入力.txt:

"Jeff"
14

ian.py:

name = input("Enter your name: ")
print("Hello", name)
age = input("Your age? ")
print("So, you are already " + str(age) + " years old, " + name + "!")

サンプル実行:

$ expect -f ian.expect ian.py input.txt
Enter your name: "Jeff"
('Hello', 'Jeff')
Your age? 14
So, you are already 14 years old, Jeff!

関連情報