Как взаимодействовать с внешней программой на Python?Python

Программы на Python
Ответить
Anonymous
 Как взаимодействовать с внешней программой на Python?

Сообщение Anonymous »

Используя Python, я хочу выполнить внешнюю программу, взаимодействовать с ней, передавая текст на ее стандартный ввод, а затем распечатать результат.
В качестве примера я создал следующую внешнюю программу под названием test.py:

Код: Выделить всё

print('Test Program')
print('1 First option, 2 Second Option')

choice = input()

if choice == '1':
second_param = input('Insert second param: ')
result = choice + ' ' + second_param

print(result)
Если я запускаю эту программу напрямую, она работает так, как ожидалось. Если я предоставлю входные данные 1, а затем 2, на выходе будет 1 2.
Я хочу запустить эту программу из другого скрипта и взаимодействовать с ней, чтобы напечатать тот же результат.
После прочтения документации по подпроцессу я получил следующее:

Код: Выделить всё

EXTERNAL_PROG = 'test.py'

p = Popen(['py', EXTERNAL_PROG], stdout=PIPE, stdin=PIPE, shell=True)

print(p.stdout.readline().decode('utf-8'))
print(p.stdout.readline().decode('utf-8'))
p.stdin.write(b'1\n')
p.stdin.write(b'2\n')
print(p.stdout.readline().decode('utf-8'))
Однако, когда я запускаю код, программа зависает после печати 1 первого варианта, 2 второго варианта, и мне нужно перезапустить оболочку. Вероятно, это вызвано тем, что subprocess.stdout.readline() ожидает найти символ новой строки, а приглашение для второго параметра его не содержит.

Я нашел два связанных вопроса, но так и не смог заставить его работать.
Здесь в ответе рекомендуется использовать модуль pexpect. Я пытался адаптировать код к своей ситуации, но это не сработало.
Здесь предлагается использовать -u, но его добавление ничего не изменило.

Я знаю, что решение можно найти, изменив test.py, но в моем случае это невозможно, так как мне нужно использовать другую внешнюю программу. Это всего лишь минимальный пример, основанный на нем.

Подробнее здесь: https://stackoverflow.com/questions/619 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»