2013-10-10 4 views
0

Я пишу простой модуль-оболочку в Python3 для двоичного кода adb с помощью модуля подпроцесса, однако команда «shell» может запускать один, один выстрел команды или без аргументов запускают интерактивную оболочку.Как я должен обернуть интерактивный подпроцесс (например, shell) в Python

В какой-то момент я (или кто-то другой) может использовать что-то вроде Vte, чтобы использовать это в графическом интерфейсе, но я потерял то, что разумно вернуть для моей функции, или если я даже буду использовать Popen in этот экземпляр.

ответ

2

Я решил использовать модуль subprocess, когда я реализовал оболочку для ADB в python. Я обнаружил, что функция check_output(...) пригодится, потому что она проверит, что команда вернется с статусом 0. Если команда, выполняемая check_output(...), возвращает ненулевой статус, то бросается CalledProcessError. Я нашел это удобным, насколько мог, чем сообщить пользователю, что некоторая команда ADB не запускалась.

Вот фрагмент того, как я реализовал метод. Не стесняйтесь ссылаться на мою реализацию ADB wrapper.

def _run_command(self, cmd): 
    """ 
    Execute an adb command via the subprocess module. If the process exits with 
    a exit status of zero, the output is encapsulated into a ADBCommandResult and 
    returned. Otherwise, an ADBExecutionError is thrown. 
    """ 
    try: 
     output = check_output(cmd, stderr=subprocess.STDOUT) 
     return ADBCommandResult(0,output) 
    except CalledProcessError as e: 
     raise ADBProcessError(e.cmd, e.returncode, e.output) 
+0

Извините, я не видел вашего ответа в течение 4 лет! –

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