Найти - Пользователи
Полная версия: Интерактивный подпроцесс в Python
Начало » Python для экспертов » Интерактивный подпроцесс в Python
1
keph
Есть утилита, которую нужно запустить из пайтон-скрипта (запустить - не проблема), но она работает в интерактивном режиме, т.е. мне надо передать несколько раз определённые символы и команды. Пробовал через 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 несколько раз не катит, так как он, судя по всему, ожидает завершения работы утилиты и следовательно программа висит.
Александр Кошелев
Посмотри эту библиотеку:
http://www.noah.org/wiki/Pexpect
keph
Pexpect под линукс, мне нада под винду
bialix

>>> 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.

keph
ну не отправляет stdin.write() нужные команды
Viper
Когда-то пробовал, вроде работало http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440554.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB