2014-03-31 20 views
0

我試圖從python腳本運行OpenStack API。我用subprocess模塊​​來做到這一點。在python腳本中運行命令並將結果存儲在csv文件或元組中

output = subprocess.check_output('nova-manage vm list',shell=True,) 
print output 

「新星管理的虛擬機列表」 出具有作爲「實例,節點,類型,狀態,啓動,圖像,內核,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 

以上就是運行「新星管理的虛擬機列表」命令輸出的示例例子。

我需要檢查只輸出的前4列,我應該如何只得到第4列出來的完整的表格?我應該如何將這4列的值存儲在csv文件中並訪問它?

我是Python腳本編程的初學者,知識很少,所以請在我的問題上提出一些看法。

謝謝,

+0

你能否提供關於輸出更多的細節?它看起來怎樣?可能還有其他兩個選項:直接使用[OpenStack-API綁定](http://www.ibm.com/developerworks/cloud/library/cl-openstack-pythonapis/index.html?ca=drs-) (避免子進程的東西)或使用sed(或其他unix命令行工具)處理「nova-manage」輸出 – dorvak

+0

感謝dorvak,您提供的鏈接非常有幫助。 – Veena

回答

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() 
+0

謝謝Sebastian的回答。我覺得使用OpenStack-API綁定非常好,因此將來可以編寫與OpenStack相關的其他腳本。 但是,您提供的上述腳本仍然會打印表格的所有列而不是前四個。我應該做什麼改變? – Veena

+0

@Veena:代碼期望'nova-manage'打印逗號分隔的字段,每行一行。如果不是這樣;提供'nova-manage'命令的輸出。不要把它放在評論中,[更新你的問題,而不是](http://stackoverflow.com/posts/22765334/edit) – jfs

+0

@維納:我已經更新了答案,接受由'nova生成的空格分隔輸入-manage'。 – jfs

相關問題