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

在python脚本中运行命令并将结果存储在csv文件或元组中,python,csv,subprocess,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

我正在尝试从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列?我应该如何在csv文件中存储这4列的值并访问它

我是python脚本的初学者,知识很少,所以请解释一下我的问题


谢谢,

第一个选项是将OpenStack API Python绑定直接用作

如果要使用子流程,则可以使用str.split解析nova manage的输出,并将前四列写入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()

你能提供更多关于输出的细节吗?看起来怎么样?可能还有两个其他选项:直接使用避免子流程的内容,或使用sed或其他unix命令行工具处理nova manage输出Hanks dorvak,您提供的链接非常有用。感谢Sebastian的回答。我觉得使用OpenStack API绑定很好,这样将来编写与OpenStack相关的其他脚本会很有帮助。但您提供的上述脚本仍然打印表的所有列,而不是前四列。我应该做什么更改?@Veena:代码要求nova manage打印逗号分隔的字段,每行一行。如果不是这样;提供nova manage命令的输出。不要把它放在评论里,@Veena:我已经更新了答案,接受nova manage提供的空间分隔输入。