Virtuozzo und Automatisierung Befehle mit Python Subprozesse
-
02-10-2019 - |
Frage
Ich bin mit einem Virtuozzo-Server zu tun und will die Protokollierung in jeden Behälter automatisieren und ein paar Befehle in Python Ausgabe von einem Teilprozess zu schaffen für ‚vzctl eingeben‘.
Hier ist der Code-Schnipsel, dass ich arbeite jetzt an -
#!/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'
Aber die Ausgabe ich jedes Mal zu sehen ist -
Unable to get term attr: Invalid argument
Unable to restore term attr: Invalid argument
ich wirklich denke, das ist ein BASH Fehler, kann mir jemand einen Vorschlag?
Lösung
Sieht aus wie vzctl erwartet stdin / stdout ein Terminal zu sein. Sie können herausfinden, welche durch (in bash) experimentieren:
$ echo whoami | vzctl enter 123 # stdin is not a tty
$ vzctl enter 123 | cat # stdout is not a tty
whoami
<ctrl-d>
Sie können die pty
Modul aus der Standardbibliothek verwenden pseudottys zu erstellen, aber das Modul ist sehr niedriges Niveau.
Es ist eine 3rd-Party-Modul pexpect
genannt, die die Rechnung passen könnten.