파일에서 입력을 리디렉션하지만 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 해커가 아니므로 이 스크립트의 개선을 환영합니다.

두 개의 입력이 포함된 예제 파일 및 스크립트:

입력.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!

관련 정보