在python脚本中运行命令并将结果存储在csv文件或元组中

时间:2014-03-31 15:12:30

标签: python csv subprocess

我正在尝试从python脚本运行OpenStack API。我使用子进程模块来做到这一点。

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”命令的输出示例。

我只需要检查输出的前4列。我应该如何只获得整个表格中的前4列?我应该如何将这4列的值存储在csv文件中并访问它?。

我是python脚本编程的初学者,知识匮乏,请详细说明我的问题。

谢谢,

1 个答案:

答案 0 :(得分:0)

第一个选项是直接将OpenStack API Python绑定用作@dorvak suggested in the comment

如果要使用子进程,则可以使用str.split()来解析nova-managecsv 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()