2015-04-28 10 views
1

當我運行下面的代碼時,輸​​出就像這樣。我需要輸出顯示行只有標題下的值。如何在行中分析特定的輸出,因爲輸出是以蟒蛇的方式進行的?

所需的輸出:

caption : 3PAR 
      3PAR 

實際輸出:

('Caption       DeviceID    Model       Partitions Size   \r\r\n3PARdata VV SCSI Disk Device  \\\\.\\PHYSICALDRIVE19 3PARdata VV SCSI Disk Device  0   1069286400 \r\r\nHP P2000 G3 FC SCSI Disk Device \\\\.\\PHYSICALDRIVE1 HP P2000 G3 FC SCSI Disk Device 1   49993251840 \r\r\nHP HSV360 SCSI Disk Device  \\\\.\\PHYSICALDRIVE7 HP HSV360 SCSI Disk Device  4   1069286400 \r\r\nHP HSV360 SCSI Disk Device  \\\\.\\PHYSICALDRIVE27 HP HSV360 SCSI Disk Device  0   1069286400 \r\r\nHP HSV360 SCSI Disk Device  \\\\.\\PHYSICALDRIVE5 HP HSV360 SCSI Disk Device  0   1069286400 \r\r\nHP P2000 G3 FC SCSI Disk Device \\\\.\\PHYSICALDRIVE23 HP P2000 G3 FC SCSI Disk Device 1   49993251840 \r\r\n3PARdata VV SCSI Disk Device  \\\\.\\PHYSICALDRIVE13 3PARdata 

代碼:

p5=subprocess.Popen("rsh -l Administrator 10.10.11.37 \"wmic diskdrive list brief\"",stdout=subprocess.PIPE, shell=True) 


result = p5.communicate() 
status = p5.wait() 
print(result), 
+0

因爲你不知道你想要什麼exacty一部分,你想怎麼拆呢:爲什麼** **和** **如何'3PAR',而不是''的VV臺3PARdata SCSI磁盤3PARdata' Device',我的更好的答案就是'print'('3PAR')'或'print('caption:3PAR \ n 3PAR')'! –

回答

0

如果你只是想Caption下的值,則使用re拆分後的空間Disk Device這在所有標題行中都很常見:

result = """Caption       DeviceID    Model       Partitions Size   \r\r\n3PARdata VV SCSI Disk Device  \\\\.\\PHYSICALDRIVE19 3PARdata VV SCSI Disk Device  0   1069286400 \r\r\nHP P2000 G3 FC SCSI Disk Device \\\\.\\PHYSICALDRIVE1 HP P2000 G3 FC SCSI Disk Device 1   49993251840 \r\r\nHP HSV360 SCSI Disk Device  \\\\.\\PHYSICALDRIVE7 HP HSV360 SCSI Disk Device  4   1069286400 \r\r\nHP HSV360 SCSI Disk Device  \\\\.\\PHYSICALDRIVE27 HP HSV360 SCSI Disk Device  0   1069286400 \r\r\nHP HSV360 SCSI Disk Device  \\\\.\\PHYSICALDRIVE5 HP HSV360 SCSI Disk Device  0   1069286400 \r\r\nHP P2000 G3 FC SCSI Disk Device \\\\.\\PHYSICALDRIVE23 HP P2000 G3 FC SCSI Disk Device 1   49993251840 \r\r\n3PARdata VV SCSI Disk Device  \\\\.\\PHYSICALDRIVE13 3PARdata""" 
import re 
spl = result.splitlines() 
print(spl[0].split()[0].rstrip()) 
for line in spl[1:]: 
    if line: 
     print(re.split("(?<=Disk Device)\s+",line,1)[0]) 

Caption 
3PARdata VV SCSI Disk Device 
HP P2000 G3 FC SCSI Disk Device 
HP HSV360 SCSI Disk Device 
HP HSV360 SCSI Disk Device 
HP HSV360 SCSI Disk Device 
HP P2000 G3 FC SCSI Disk Device 
3PARdata VV SCSI Disk Device 
+0

上面的代碼工作正常,如果我們將輸出硬編碼到一個變量,而不是硬編碼或在「結果」中分配輸出,因爲它基於命令輸出持續改變每個服務器輸出,輸出是否可以分裂按規定格式按命令結果 HP P2000 G3 FC SCSI磁盤設備 HP HSV360 SCSI磁盤設備 HP HSV360 SCSI磁盤設備 HP HSV360 SCSI磁盤設備 HP P2000 G3 FC SCSI磁盤設備 臺3PARdata VV SCSI磁盤設備 – suman

+0

@ suman,不知道你的意思,結果只是運行命令的輸出,'p5.communicate()[0]'和上面的結果完全一樣。你也應該真的使用'check_output'並通過一個參數列表 –

+0

@Padriac添加「check_output」問題解決後感謝您的建議..它幫助了很多 – suman