将文件设为默认标准输入
Making a file as default stdin
我想默认从文件中获取输入。
例如:
num=input()
此语句应从文件中获取输入,而不是等待按键命中。我不想通过将标准输入重定向到文件来做到这一点,默认情况下我想要它。简单地说,键盘是默认的输入设备,所以我想要一个文件来代替键盘来提供输入。
您可以像这样将文件附加到 OS 级别的标准输入:
python script.py <input.txt
对于脚本来说,无论何时调用 input()
,用户都会键入文件中的下一行。
一个简单的解决方法。
def file_input(filename):
with open(filename, 'r') as f:
for line in f:
yield line
_input_iterator = file_input('input.txt')
def input_(): # replace input
return _input_iterator.next()
您可以通过使用 class 包装它或使其成为一个模块来避免全局变量。
我不喜欢这样,但这是可能的。真正替换标准输入(还没有在 windows 上尝试过)
import sys
sys.stdin = file('input.txt', 'r')
input_line = input()
对于 UNIX 模型,stdin
只是一个文件。当您使用像 pipe
这样的实用程序时,您会 modify/redirect stdin
个子进程。如果在父级范围(例如终端)中修改进程的 stdin
,感觉会更舒服。否则它看起来不像 'std' 了。
我想默认从文件中获取输入。 例如:
num=input()
此语句应从文件中获取输入,而不是等待按键命中。我不想通过将标准输入重定向到文件来做到这一点,默认情况下我想要它。简单地说,键盘是默认的输入设备,所以我想要一个文件来代替键盘来提供输入。
您可以像这样将文件附加到 OS 级别的标准输入:
python script.py <input.txt
对于脚本来说,无论何时调用 input()
,用户都会键入文件中的下一行。
一个简单的解决方法。
def file_input(filename):
with open(filename, 'r') as f:
for line in f:
yield line
_input_iterator = file_input('input.txt')
def input_(): # replace input
return _input_iterator.next()
您可以通过使用 class 包装它或使其成为一个模块来避免全局变量。
我不喜欢这样,但这是可能的。真正替换标准输入(还没有在 windows 上尝试过)
import sys
sys.stdin = file('input.txt', 'r')
input_line = input()
对于 UNIX 模型,stdin
只是一个文件。当您使用像 pipe
这样的实用程序时,您会 modify/redirect stdin
个子进程。如果在父级范围(例如终端)中修改进程的 stdin
,感觉会更舒服。否则它看起来不像 'std' 了。