2012-01-03 5 views
3

Используя модуль python pty, я хочу отправить некоторые команды эмулятору терминала, используя функцию stdin (как хочет модуль pty), а затем принудительно завершает работу. Я думал о чем-то вродеОтправить команду и выход с использованием python pty pseudo terminal process

import pty 
cmnds = ['exit\n', 'ls -al\n'] 
# Command to send. I try exiting as last command, but it doesn't works. 

def r(fd): 
    if cmnds: 
     cmnds.pop() 
     # It seems is not executing sent commands ('ls -al\n') 
    else: 
     # Can i quit here? Can i return EOF? 
     pass 

pty.spawn('/bin/sh', r) 

Спасибо

+0

Возможно, вы захотите исследовать pexpect, который предназначен для такого рода вещей: http://www.noah.org/wiki/pexpect –

+0

У меня есть только pty – Emilio

+0

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

ответ

2

Во-первых, pty модуль не позволяет вам общаться с помощью эмулятора терминала Python выполняется. Вместо этого, он позволяет Python симулировать быть в терминальный эмулятор.

Рассматривая исходный код pty.spawn(), похоже, что он предназначен для того, чтобы порочный процесс захватил stdin и stdout Python во время его запуска, чего вы не хотите.

Если вы просто хотите, чтобы породить оболочку, посылать команды на него, и читать вывод, вы, вероятно, хотите subprocess модуль Python (в частности, если есть только одна команда, которую вы хотите запустить, то .communicate() метод subprocess.Popen класс быть полезным).

Если вам действительно нужен подпроцесс для работы в pty вместо трубы, вы можете использовать os.openpty() для выделения главного и подчиненного дескриптора файла. Используйте дескриптор подчиненного файла в качестве подпроцесса 'stdin и stdout, затем запишите свои команды в дескриптор главного файла и прочитайте ответы от него.

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

  • Нет связанных вопросов^_^