在Python脚本中运行命令并将结果存储为CSV文件或元组

1 投票
1 回答
2306 浏览
提问于 2025-04-18 00:41

我正在尝试通过一个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()

撰写回答