Virtuozzo comandos y automatizar con subprocesos de Python
-
02-10-2019 - |
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?
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.