Виртуоццо и автоматизация команд с подпроцессами Python

StackOverflow https://stackoverflow.com/questions/3198617

  •  02-10-2019
  •  | 
  •  

Вопрос

Я имею дело с Virtuozzo Server и хочу автоматизировать входа в каждую контейнер и выдавать несколько команд в Python, создавая подпроцесс для «VZCTL Enter».

Вот фрагмент, на котором я сейчас работаю -

#!/usr/bin/python

import subprocess

print 'Start'
proc = subprocess.Popen(['vzctl enter 123'], 
                             stdout=subprocess.PIPE, 
                             stdin=subprocess.PIPE,
                             shell=True)
print proc.communicate('whoami')[0]
print 'Finished'

Но вывод я вижу каждый раз -

Unable to get term attr: Invalid argument
Unable to restore term attr: Invalid argument

Я действительно думаю, что это ошибка Bash, может кто-нибудь дать мне предложение?

Это было полезно?

Решение

Похоже, vzctl ожидает, что stdin / stdout - быть терминалом. Вы можете узнать, какие по экспериментированию (в Bash):

$ echo whoami | vzctl enter 123  # stdin is not a tty

$ vzctl enter 123 | cat          # stdout is not a tty
whoami
<ctrl-d>

Вы можете использовать pty Модуль из стандартной библиотеки для создания псевдоттыков, но этот модуль очень низкий уровень.

Существует 3-й партийный модуль pexpect Это может соответствовать законопроекту.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top