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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top