Virtuozzo并使用Python的子进程自动执行命令

时间:2010-07-07 20:41:47

标签: python subprocess virtuozzo

我正在处理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错误,任何人都可以给我一个建议吗?

1 个答案:

答案 0 :(得分: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模块来创建pseudottys,但该模块的级别非常低。

有一个名为pexpect的第三方模块可能适合该法案。