РЕДАКТИРОВАТЬ: После прочтения других ответов и комментариев, я думаю, я нашел хороший способ действительно перенаправить стандартный ввод. Обратите внимание, что я предположил, что вы будете знать, что входные данные для raw_inputs конечного пользователя должны быть.
Код пользователя (по имени some_module.py)
print "running some module with 5 raw_input requests"
for x in range(5):
value = raw_input("This is someone else's code asking its (" + str(x) + ") raw_input: ")
print 'stdin value: ' + value
Ваш тестовый скрипт (Назван как угодно)
import sys
class MY_STD_IN( object ):
def __init__(self, response_list):
self.std_in_list = response_list
self.std_in_length = len(response_list)
self.index = 0
def readline(self):
value = self.std_in_list[self.index]
print value
if self.index < self.std_in_length -1:
self.index += 1
else:
self.index = 0
return value
predetermined_stdin_responses = ['Value 1\r', 'Value 2\r', 'Value 3\r']
sys.stdin = MY_STD_IN( predetermined_stdin_responses )
import some_module
Запуск сценария дает
запуск некоторого модуля с 5 запросами raw_input
Это чужой код, запрашивающий его (0) raw_input: значение 1
стандартное значение: значение 1
Это чужой код, запрашивающий его (1) raw_input: значение 2
стандартное значение: значение 2
Это чужой код, запрашивающий его (2) raw_input: значение 3
стандартное значение: значение 3
Это чужой код, запрашивающий его (3) raw_input: значение 1
стандартное значение: значение 1
Это чужой код, запрашивающий его (4) raw_input: значение 2
стандартное значение: значение 2
Оригинальный ответ
Не уверен, если вы ищете такой буквальный ответ, но вот он
import sys
import StringIO
s = StringIO.StringIO("Hello")
sys.stdin = s
a = raw_input("Type something: ")
sys.stdin = sys.__stdin__
print(a+"\nYou typed in: "+a)
Урожайность:
Введите что-то: Hello
Вы ввели: Привет