2010-07-16 2 views
0

есть скрипт, который ожидает ввода с клавиатуры, я могу назвать этот сценарий с os.system («./ сценарий») в питона,, как взаимодействовать с внешним скриптом (программа)

, как это возможно отправить обратно в скрипт из другого сценария вызова?

обновление:

сценарий:

$ cat script 
#!/usr/bin/python 
for i in range(4): 
     name=raw_input('enter your name') 
     print 'Welcome %s :) ' % name 

, когда я стараюсь не для цикла, он работает, но он показывает выход только тогда, когда скрипт завершает работу.

>>> p = subprocess.Popen('./script',stdin=subprocess.PIPE) 
>>> p.communicate('navras') 
enter your nameWelcome navras :) 

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

>>> p.communicate('megna') 
enter your nameWelcome megna :) 
enter your nameTraceback (most recent call last): 
    File "./script", line 3, in <module> 
    name=raw_input('enter your name') 
EOFError: EOF when reading a line 
(None, None) 

ответ

1

Вы можете использовать подпроцесс вместо os.system:

p = subprocess.Popen('./script',stdin=subprocess.PIPE) 
p.communicate('command') 

его не testet

+0

Эти ссылки должны дать более подробную информацию: http://docs.python.org/library/subprocess.html http://jimmyg.org/blog/2009/working-with-python-subprocess.html В приведенном выше примере вы, вероятно, также хотите добавить аргумент 'stdout = subprocess.PIPE'. Функция связи должна возвращать кортеж '(stdout, stderr)' с данными, отправленными каждому из этих дескрипторов. Вы также попробуете 'p.stdin.write()' и 'p.stdout.readline()'. В самом деле, вы можете обрабатывать 'p.stdin' и' p.stdout' так же, как и любой другой файл-объект :) –

+0

, когда я пытаюсь использовать его с помощью петли foor, он выдает ошибку. Как отображать операторы интерактивные, как и когда stdout обновляется новыми операциями печати. >>> p.communicate ('Мегна') введите свой nameWelcome Мегна :) введите свой nameTraceback (самый последний вызов последнего): File "./script", линия 3, в имя = raw_input (» введите свое имя ') EOFError: EOF при чтении строки (None, None) –

-2

В самом деле, os.system и os.p open теперь устарели, а подпроцесс - рекомендуемый способ обработки всех взаимодействий подпроцесса.