2014-01-27 2 views
0

У меня есть скрипт Python, который принимает пользовательский ввод во время выполнения и дает некоторые результаты. Пример кода:Использовать Python для запуска интерактивных скриптов python

import random 
l1 = ['Bob', 'Eric', 'Dimitar', 'Kyle'] 
l2 = ['Scott', 'Mat', 'Con'] 
n = raw_input('Enter no. of persons: ') 
for i in range(int(n)): 
    print random.choice(l1) + ' ' + random.choice(l2) 

Выход:

$ ./generate_name.py 
Enter no. of persons: 2 
Kyle Scott 
Eric Mat 

Теперь я хочу, чтобы написать другой сценарий Python, который запускается в первый Python скрипт несколько раз с определенным входом (входная последовательность хранится в виде списка) и записывать выходные данные в файл. Кроме того, я не могу вносить какие-либо изменения в первый код Python.

Я могу использовать модуль subprocess для запуска сценария и записи вывода, но как я могу позаботиться о интерактивной части ввода пользователя?

+1

Если вы используете систему в стиле Unix, вы можете использовать трубы ... –

+0

Вы имеете в виду что-то вроде: 'subprocess.Popen ('./ generate_name.py <<< 2', shell = 1)'. Да, это сработает. Большое спасибо :) –

+3

Вероятно, вы должны использовать аргумент 'stdin' для' Popen', а не использовать 'shell = True' (или вашу менее идиоматическую версию). – geoffspear

ответ

0

Я вижу два варианта: вы можете либо запустить его как отдельный процесс и действительно использовать subprocess, такие как

sp = subprocess.Popen(['./generate_name.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
sp.stdin.write("2\n") 
sp.stdin.close() 
answer = sp.stdout.read() 
status = sp.wait() 

или вы берете свой сценарий и exec его. Прежде чем вы это сделаете, вы можете перенаправить sys.stdin и sys.stdout, и вы можете делать и отслеживать все сделанные вами изменения. Таким образом, вы можете запустить его внутри одного процесса.

Смежные вопросы