Как автоматизировать ввод оболочки с помощью Python? - PullRequest
3 голосов
/ 10 августа 2011

Я автоматизирую некоторые задачи с помощью Python, но наткнулся на некоторое препятствие.Одна из задач, которую я автоматизирую, требует ввода данных пользователем в оболочке.

Требуется, чтобы вы запустили команду с адресом электронной почты в качестве параметра (достаточно просто), а затем вас попросили пройти аутентификацию с паролем для этого адреса электронной почты.Как вы можете имитировать пользовательский ввод для предоставления пароля?

Есть также некоторые меню, которые впоследствии запрашивают параметры, для которых ввод должен быть только несколько раз нажать Enter.Как это моделируется?Помните, что это окно не всегда будет иметь фокус.

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Я не уверен, что вы спрашиваете во второй части, но подпроцессами можно управлять с помощью модуля pexpect.Например:

#!/usr/bin/env python

import pexpect
import sys

# Get email and password somehow
#email = ...
#password = ...

# Start the subprocess
child = pexpect.spawn('mycommand %s' % email)
# redirect output to stdout
child.logfile_read = sys.stdout

# Assumes the prompt is "password:"
child.expect('password:')
child.sendline(password)

# Wait for the process to close its output
child.expect(pexpect.EOF)
1 голос
/ 10 августа 2011

Похоже, вы думаете неправильно.Вам просто нужно отправить несколько байтов через канал получателю (в вашем случае это скрипт оболочки), и это можно сделать с помощью subprocess.

0 голосов
/ 10 августа 2011

Я думаю, вы можете использовать ожидать для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...