Форум сайта python.su
Есть утилита, которую нужно запустить из пайтон-скрипта (запустить - не проблема), но она работает в интерактивном режиме, т.е. мне надо передать несколько раз определённые символы и команды. Пробовал через 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
Офлайн
Pexpect под линукс, мне нада под винду
Офлайн
>>> 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.
…
Офлайн
ну не отправляет stdin.write() нужные команды
Офлайн
Когда-то пробовал, вроде работало http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440554.
Офлайн