可以使用 < 运算符重定向文件中的输入。因此,如果我有一个 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
伊恩.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
伊恩.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!