Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2008 17:03:39

keph
От:
Зарегистрирован: 2008-02-15
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Интерактивный подпроцесс в Python

Есть утилита, которую нужно запустить из пайтон-скрипта (запустить - не проблема), но она работает в интерактивном режиме, т.е. мне надо передать несколько раз определённые символы и команды. Пробовал через subprocess и communicate, но communicate, как-то не совсем правильно передаёт несколько команд. Ниже код. Посоветуйте, что делать, может нужно использовать что-то другое.

Код:

import subprocess
a = subprocess.Popen('robtest', bufsize=1024, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True)
print a.communicate('1\nm s1 p1\nq\n2\n')

Вызов communicate несколько раз не катит, так как он, судя по всему, ожидает завершения работы утилиты и следовательно программа висит.



Офлайн

#2 Фев. 15, 2008 20:19:41

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Интерактивный подпроцесс в Python

Посмотри эту библиотеку:
http://www.noah.org/wiki/Pexpect



Офлайн

#3 Фев. 15, 2008 20:36:13

keph
От:
Зарегистрирован: 2008-02-15
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Интерактивный подпроцесс в Python

Pexpect под линукс, мне нада под винду



Офлайн

#4 Фев. 15, 2008 21:37:26

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Интерактивный подпроцесс в Python


>>> import subprocess
>>> help(subprocess)

The following attributes are also available:

stdin
If the stdin argument is PIPE, this attribute is a file object
that provides input to the child process. Otherwise, it is None.

stdout
If the stdout argument is PIPE, this attribute is a file object
that provides output from the child process. Otherwise, it is
None.

stderr
If the stderr argument is PIPE, this attribute is file object that
provides error output from the child process. Otherwise, it is
None.



Офлайн

#5 Фев. 15, 2008 21:52:17

keph
От:
Зарегистрирован: 2008-02-15
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Интерактивный подпроцесс в Python

ну не отправляет stdin.write() нужные команды



Офлайн

#6 Фев. 18, 2008 13:35:47

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Интерактивный подпроцесс в Python

Когда-то пробовал, вроде работало http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440554.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version