我正在尝试从python脚本运行OpenStack API。我使用子进程模块来做到这一点。
output = subprocess.check_output('nova-manage vm list',shell=True,)
print output
instance node type state launched image kernel ramdisk project user zone index
ubuntu12_1 compute1 m1.small active 2014-03-25 07:57:51 946fbcc5-03c3-48a1-9ef9-f6d6362c6152 53963e60e44c4c54b7507e81cf11ef2c f47f5c0a54374a4b8aa78e5349246b0f None 0
ubuntu12_2 compute1 m1.small active 2014-03-25 07:59:03 946fbcc5-03c3-48a1-9ef9-f6d6362c6152 53963e60e44c4c54b7507e81cf11ef2c f47f5c0a54374a4b8aa78e5349246b0f None 0
ubuntu12_3 compute2 m1.small active 2014-03-26 07:27:16 946fbcc5-03c3-48a1-9ef9-f6d6362c6152 53963e60e44c4c54b7507e81cf11ef2c f47f5c0a54374a4b8aa78e5349246b0f None 0
ubuntu12_4 compute2 m1.small active 2014-03-26 07:46:56 946fbcc5-03c3-48a1-9ef9-f6d6362c6152 53963e60e44c4c54b7507e81cf11ef2c f47f5c0a54374a4b8aa78e5349246b0f nova
以上是运行“nova-manage vm list”命令的输出示例。
我只需要检查输出的前4列。我应该如何只获得整个表格中的前4列?我应该如何将这4列的值存储在csv文件中并访问它?。
我是python脚本编程的初学者,知识匮乏,请详细说明我的问题。
谢谢,
答案 0 :(得分:0)
第一个选项是直接将OpenStack API Python绑定用作@dorvak suggested in the comment。
如果要使用子进程,则可以使用str.split()
来解析nova-manage
和csv
module的输出,将前四列写入csv文件:
import csv
import sys
from subprocess import Popen, PIPE
file = sys.stdout # or use with open('output_filename', 'wb') as file:
p = Popen(['nova-manage', 'vm', 'list'], stdout=PIPE)
next(p.stdout) # skip header line
csv.writer(file).writerows(line.split()[:4] for line in p.stdout)
p.stdout.close()
p.wait()