我不知道为什么下面的代码不工作。文件arch_list不会被创建或写入任何内容。这些命令单独在终端中运行时可以正常工作。
from yum.plugins import PluginYumExit , TYPE_CORE, TYPE_INTERACTIVE
import os
requires_api_version = '2.3'
plugin_type = (TYPE_CORE, TYPE_INTERACTIVE)
ip_vm = ['192.168.239.133']
def get_arch():
global ip_vm
os.system("uname -p > ~/arch_list")
for i in ip_vm:
cmd = "ssh thejdeep@"+i+" 'uname -p' >> ~/arch_list"
print cmd
os.system(cmd)
def init_hook(conduit):
conduit.info(2,'Hello World !')
get_arch()
我不认为os.system()会在这种情况下返回标准输出。您可以尝试使用带有适当参数的subprocess.call()。
编辑:实际上,我想我记得在标准bash循环中运行时看到ssh的类似行为。您可以尝试在ssh调用中添加-n。我认为这是我多年前在bash中使用的解决方案。
我刚刚运行了你的代码,它对我来说工作得很好,写入本地arch文件。我怀疑在您的列表中添加多个主机是您开始遇到问题的地方。你运行的是什么版本的python ?我是2.7.6。
os.system()不会重定向标准输出和标准错误。
可以使用子进程模块Popen将标准输出和标准错误设置为文件描述符或管道。
例如:>>> import subprocess
>>> child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
>>> print child1.stdout.readlines()
您可以将subprocess.PIPE
替换为您打开的任何有效的文件描述符。或者你可以选择文件中的一些行。