Pregunta

Estoy tratando con un servidor Virtuozzo y desee automatizar el registro en cada recipiente y la emisión de unos pocos comandos de Python mediante la creación de un subproceso de 'vzctl enter'.

Este es el fragmento que estoy trabajando en este momento -

#!/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'

Sin embargo, la salida cada vez que veo es -

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

Realmente creo que esto es un error de Bash, ¿alguien puede darme una sugerencia?

¿Fue útil?

Solución

Las apariencias como vzctl espera stdin / stdout a ser un terminal. Usted puede averiguar qué mediante la experimentación (en bash):

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

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

Puede utilizar el módulo pty de la biblioteca estándar para crear pseudottys, pero ese módulo es de muy bajo nivel.

Hay un módulo de tercera-parte llamada pexpect que podrían ajustarse a la ley.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top