質問

私は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 それは法案に合うかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top