Virtuozzo и автоматизация команд с подпроцессами Python - PullRequest
1 голос
/ 08 июля 2010

Я имею дело с сервером Virtuozzo и хочу автоматизировать вход в каждый контейнер и вводить несколько команд в 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, кто-нибудь может дать мне предложение?

1 Ответ

2 голосов
/ 10 июля 2010

Похоже, что 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 из стандартной библиотеки для создания псевдотон, но этот модуль очень низкого уровня.

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

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