1

私は 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

これは本当にBASHエラーだと思います。誰か提案してもらえますか?

4

1 に答える 1

2

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して疑似端末を作成できますが、そのモジュールは非常に低レベルです。

pexpect法案に適合する可能性があると呼ばれるサードパーティのモジュールがあります。

于 2010-07-10T14:01:02.673 に答える