Я пытаюсь понять, как работает input.
input
Приведена, например, простая функция, такая как:
def f(): s = input() print(s)
Есть способ вызвать f и заставить его напечататьчто-то без построения конвейеров?
f
Очевидно, не вводя ничего в терминологию.
Один из способов сделать это - временно переопределить sys.stdin.
sys.stdin
например:
import sys from StringIO import StringIO input_text = 'whatever you want the function to read from input()' old_stdin = sys.stdin #Reassign stdin to a StringIO object sys.stdin = StringIO(input_text) f() sys.stdin = old_stdin
Да, выполнение второй оболочки Python в подпроцессе является единственным способом ввода input (если вы не хотите переопределить input в модуле).
Вместо этого вы должны читать из произвольного файла (и сделать значение по умолчанию sys.stdin). Затем вы можете просто установить другой файл - либо временный на диске, либо объект типа StringIO.
StringIO
import sys,StringIO def f(inputfile=sys.stdin): s = inputfile.readline() print(s) # To test, call it like this: f(StringIO.StringIO('testdata\n'))
Нельзя предоставить текст по умолчанию для input () .
Но если вы используете Linux и Bash, вы можете сделать что-то вроде этого:
import readline def rlinput(prompt, prefill=''): readline.set_startup_hook(lambda: readline.insert_text(prefill)) try: return raw_input(prompt) finally: readline.set_startup_hook() rlinput("Do you want to delete all files? ", "yes")
(изменено из этого SO-ответа ).
Смотри также:
Не то, чтобы я обязательно рекомендовал это решение, но вы можете привязать input к другой функции ...