我不知道为什么以下代码无效。文件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()
答案 0 :(得分:0)
在这种情况下,我认为os.system()不会返回stdout。您可以尝试使用带有适当参数的subprocess.call()。
编辑:实际上我想我记得在标准的bash循环中运行时看到与ssh类似的行为。您可以尝试在ssh调用中添加-n。我认为这是我多年前在bash中使用的解决方案。
我刚刚运行了你的代码,它可以正常工作,写入本地arch文件。我怀疑在列表中添加多个主机是您遇到问题的地方。你在运行什么版本的python?我在2.7.6。
答案 1 :(得分:0)
os.system()不会重定向stdout和stderr。
您可以使用子进程模块Popen将stdout和stderr设置为文件描述符或管道。
例如:
>>> import subprocess
>>> child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
>>> print child1.stdout.readlines()
您可以将subprocess.PIPE
替换为您为写入而打开的任何有效文件描述符。或者你可以拿起一些行到文件。这是你的电话。