Pythonのサブプロセスを使用したVirtuozzoと自動コマンド
-
02-10-2019 - |
質問
私はvirtuozzoサーバーを扱っており、各コンテナへのログを自動化し、「VZCTL Enter」のサブプロセスを作成してPythonでいくつかのコマンドを発行したいと考えています。
これが私が今取り組んでいるスニペットです -
#!/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
私は本当にこれがバッシュのエラーだと思います、誰でも私に提案をすることができますか?
解決
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
それは法案に合うかもしれません。
所属していません StackOverflow