Virtuozzo与使用Python子进程自动化命令
我正在处理一个Virtuozzo服务器,想用Python自动登录到每个容器里,并执行一些命令。我打算通过创建一个子进程来运行'vzctl enter '。
这是我现在正在使用的代码片段 -
#!/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 个回答
2
看起来,vzctl这个工具需要标准输入和输出是一个终端。你可以通过一些实验来确认这一点(在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
,可能会更适合你的需求。