在Python脚本中运行命令并将结果存储为CSV文件或元组
我正在尝试通过一个Python脚本来运行OpenStack的API。我使用了subprocess模块来实现这个功能。
output = subprocess.check_output('nova-manage vm list',shell=True,)
print output
运行"nova-manage vm list"命令会得到一个表格,表格里有“实例、节点、类型、状态、启动时间、镜像、内核、ramdisk、项目、用户、区域、索引”这些列。
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"命令后输出的一个示例。
我只需要检查输出的前四列。请问我该如何从完整的表格中提取出这四列?我应该如何把这四列的值存储到一个csv文件中,并且如何访问它呢?
我在Python脚本方面还是个初学者,知识很有限,所以请帮我解答这个问题。
谢谢,
1 个回答
1
第一种选择是直接使用 OpenStack API 的 Python 绑定,就像@dorvak 在评论中提到的那样。
如果你想使用子进程的话,可以用 str.split()
来解析 nova-manage
的输出,然后用csv
模块把前四列写入一个 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()