Virtuozzo и автоматизирующие команды с подпроцессами Python

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

Вот отрывок, что я продолжаю работать прямо сейчас -

#!/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
задан sholsapp 7 July 2010 в 20:41
поделиться

1 ответ

Похоже, что 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, который может соответствовать требованиям.

2
ответ дан 2 September 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: