我必須在 shell 上執行命令后提取資料。我能夠以字串的形式執行命令并捕獲輸出。下面是示例字串輸出,我必須從中提取“uptime”命令輸出的每個欄位,例如上次重啟發生在、重啟后的時間等。我試圖在字典中轉換它,但應用的方法不起作用。
示例字串:
b'\r\n\r\n adjDisc/, adjprov/, ains/, alarm/, alatypes/, almBase/, ALPL/, alrmst, ALSO/, \r\n applblki/, aTrace/, BackPlane/, baseUtils /, brownout/, bwm/, cac/, cdb/, \r\n chkpt/, CLAF/, clustering/, cmnfpga/, comms/, config/, configFile/, control/, \r\n cpl, cplutils/ , create_file, csclient/, dasm_cfm/, datasync/, dbalrms/, \r\n dbman/, dbrst/, ddf/, decommission/, diag/, difReasons, doc/, dov/, ds1tm/, \r\n dsbl /, edf, ehf/, epl/, EqptAttr/, eqptgrp/, eqpt_mode/, eqpt_stats/, \r\n eslots/, fhgraph/, filesync/, flashBurn/, flightrec/, fpo/, fsm/, ftp/, \r\n ftpClient/, gzip/, hal/, hdsmlinkdata/, heapStats, httpc/, i2c/, imon/, ins/, \r\n intDiag/, intrrpts/, ipc/, ipm/, irq1/, irq2 /、IRQ6/、isc/、l2Services/、\r\n leds/、loadinfo/、loadMgmt/、logs/、lua/、manufacturing/、memStats、\r\n misconnection/、mmon/、mofshadow/、nbi_common_utils/、necht/、niapp/、nlc/、\r\n nncli/、oamfac/、obm/、observer/、opmCtrl/、opmCtrlFlex/、OSRP/、otdr/、\r\n owireci/、passive_slots/、 pathopt/, pbe/, pdns/, PhotonicNBI/, \r\n photonicsNVSRecovery/, photonic_ots/, photop/, plog/, PM/, pm/, pmbase/, \r\n pmp/, pods/, powerAudit/, pramUtil/,ras/,RASDBGI,rdbg,rmcemon/,\r\n round_trip_delay/,rpr/,rtrvlog/,sbf/,scmpml/,secure_erase_cmn/,\r\n setpriv,shelfinfo/,shelfSync/,slc/, sloteq/, snmp/, SNMPTranslator/, \r\n socKernel/, socLa/, SONMP/, sorn/, sov/, spfpga/, spsid_dump, \r\n SpSwSubFailReason, spsync/, sptools/, svrest/, sync/ , tar/, targetshell/, \r\n tcsdebug/, tdrf/, tdrfShow, teas/, telnet/, tidci/, tl1ci/, TL1EvtSeq/, \r\n tl1_to_avp/, tod/, top/, tpUtl/, tr/, trace/, tracepoints/, TRCntrl/, \r\n ts1forn/, tsam/, tsbase/, tsds3ec1/, tsemotr/, tsexer/,tsfpo/, tssl2/, \r\n tsmdd_qry/, tsm_prov/, tsm_sbf/, tsngm/, tsocn/, tsotnsw/, tsplug/, tsprot/, \r\n tsprsta/, tssmux/, tsstm1ee4/, tsxc_sbf/, ts_allocation/, ud2_fwd/, udp_fwd/, \r\n upgrade/, uptime, vbus/, vfs/, vfs_signal_debug/, vkgcct/, vkgfan/, vkginv/, \r\n vkgio/, vkgpwr/, vk_i2c_acc/, vneProxy /, vosa/, *=quit\r\n\r\nTID="Sub_6500_3":Shelf=1\r\nSlot15-docInst: unset, ome_sp2_vx_appl: OME1280.BP\r\n命令于 2022 年 6 月 7 日星期二完成 - 04:58:42 (UTC)\r\n\r\n----> ~ uptime \r\n上次重啟發生在:2022 年 5 月 27 日星期五 07:42:31 (UTC) \r\n自重啟:10 天 21 小時 16 分鐘 13 秒\r\n\r\n實際累積正常運行時間:489 天 7 小時 30 分鐘\r\n記錄的累積正常運行時間:488 天 11 小時 54 分鐘\r\n\r\n實際連續正常運行時間: 118 天 15 小時 47 分鐘\r\n\r\n命令于 2022 年 6 月 7 日星期二 - 04:58 完成:44 (UTC)\r\n\r\n----> '
uj5u.com熱心網友回復:
您收到的輸出型別為bytes. 呼叫其decode()方法將其轉換為str.
遍歷字串的每一行并在輸出開始uptime_output_reached后設定一個標志 ( ) 。uptime一旦設定了該標志,以下行將在第一次出現時被拆分為 2 個字串: 。這些將是用于存盤正常運行時間結果的鍵值對。
你做了什么嘗試?使用您嘗試過的代碼編輯您的問題,即使它不起作用。
output_bytes = b'\r\n\r\n adjDisc/, adjprov/, ains/, alarm/, alatypes/, almBase/, ALPL/, alrmst, ALSO/, \r\n applblki/, aTrace/, BackPlane/, baseUtils/, brownout/, bwm/, cac/, cdb/, \r\n chkpt/, CLAF/, clustering/, cmnfpga/, comms/, config/, configFile/, control/, \r\n cpl, cplutils/, create_file, csclient/, dasm_cfm/, datasync/, dbalrms/, \r\n dbman/, dbrst/, ddf/, decommission/, diag/, difReasons, doc/, dov/, ds1tm/, \r\n dsbl/, edf, ehf/, epl/, EqptAttr/, eqptgrp/, eqpt_mode/, eqpt_stats/, \r\n eslots/, fhgraph/, filesync/, flashBurn/, flightrec/, fpo/, fsm/, ftp/, \r\n ftpClient/, gzip/, hal/, hdsmlinkdata/, heapStats, httpc/, i2c/, imon/, ins/, \r\n intDiag/, intrrpts/, ipc/, ipm/, irq1/, irq2/, IRQ6/, isc/, l2Services/, \r\n leds/, loadinfo/, loadMgmt/, logs/, lua/, manufacturing/, memStats, \r\n misconnection/, mmon/, mofshadow/, nbi_common_utils/, necht/, niapp/, nlc/, \r\n nncli/, oamfac/, obm/, observer/, opmCtrl/, opmCtrlFlex/, OSRP/, otdr/, \r\n owireci/, passive_slots/, pathopt/, pbe/, pdns/, PhotonicNBI/, \r\n photonicsNVSRecovery/, photonic_ots/, photop/, plog/, PM/, pm/, pmbase/, \r\n pmp/, pods/, powerAudit/, pramUtil/, ras/, RASDBGI, rdbg, rmcemon/, \r\n round_trip_delay/, rpr/, rtrvlog/, sbf/, scmpml/, secure_erase_cmn/, \r\n setpriv, shelfinfo/, shelfSync/, slc/, slotseq/, snmp/, SNMPTranslator/, \r\n socKernel/, socLa/, SONMP/, sorn/, sov/, spfpga/, spsid_dump, \r\n SpSwSubFailReason, spsync/, sptools/, svrest/, sync/, tar/, targetshell/, \r\n tcsdebug/, tdrf/, tdrfShow, teas/, telnet/, tidci/, tl1ci/, TL1EvtSeq/, \r\n tl1_to_avp/, tod/, top/, tpUtl/, tr/, trace/, tracepoints/, TRCntrl/, \r\n ts1forn/, tsam/, tsbase/, tsds3ec1/, tsemotr/, tsexer/, tsfpo/, tsl2/, \r\n tsmdd_qry/, tsm_prov/, tsm_sbf/, tsngm/, tsocn/, tsotnsw/, tsplug/, tsprot/, \r\n tsprsta/, tssmux/, tsstm1ee4/, tsxc_sbf/, ts_allocation/, ud2_fwd/, udp_fwd/, \r\n upgrade/, uptime, vbus/, vfs/, vfs_signal_debug/, vkgcct/, vkgfan/, vkginv/, \r\n vkgio/, vkgpwr/, vk_i2c_acc/, vneProxy/, vosa/, *=quit\r\n\r\nTID="Sub_6500_3":Shelf=1\r\nSlot15-docInst: unset, ome_sp2_vx_appl: OME1280.BP\r\nCommand completed at TUE JUN 07, 2022 - 04:58:42 (UTC)\r\n\r\n----> ~ uptime \r\nLast restart occurred at: FRI MAY 27, 2022 at 07:42:31 (UTC) \r\nTime since restart: 10 days 21 hrs 16 mins 13 secs\r\n\r\nActual Cumulative uptime: 489 days 7 hrs 30 mins\r\nLogged Cumulative uptime: 488 days 11 hrs 54 mins\r\n\r\nActual Continuous uptime: 118 days 15 hrs 47 mins\r\n\r\nCommand completed at TUE JUN 07, 2022 - 04:58:44 (UTC)\r\n\r\n----> '
output = output_bytes.decode()
uptime_output_reached = False
uptime_results = {}
for line in output.splitlines():
if line == "----> ~ uptime ":
uptime_output_reached = True
continue
if uptime_output_reached:
if ": " in line:
key, value = line.split(": ", 1)
uptime_results[key] = value
print("uptime results:")
for key, value in uptime_results.items():
print(f"'{key}': '{value}'")
輸出:
uptime results:
'Last restart occurred at': 'FRI MAY 27, 2022 at 07:42:31 (UTC) '
'Time since restart': '10 days 21 hrs 16 mins 13 secs'
'Actual Cumulative uptime': '489 days 7 hrs 30 mins'
'Logged Cumulative uptime': '488 days 11 hrs 54 mins'
'Actual Continuous uptime': '118 days 15 hrs 47 mins'
uj5u.com熱心網友回復:
作為@GordonAitchJay 描述的替代方案,您可以使用regexp以下內容:
sample = b'\r\n\r\n adjDisc/, adjprov/, ains/, alarm/, alatypes/, almBase/, ALPL/, alrmst, ALSO/, \r\n applblki/, aTrace/, BackPlane/, baseUtils/, brownout/, bwm/, cac/, cdb/, \r\n chkpt/, CLAF/, clustering/, cmnfpga/, comms/, config/, configFile/, control/, \r\n cpl, cplutils/, create_file, csclient/, dasm_cfm/, datasync/, dbalrms/, \r\n dbman/, dbrst/, ddf/, decommission/, diag/, difReasons, doc/, dov/, ds1tm/, \r\n dsbl/, edf, ehf/, epl/, EqptAttr/, eqptgrp/, eqpt_mode/, eqpt_stats/, \r\n eslots/, fhgraph/, filesync/, flashBurn/, flightrec/, fpo/, fsm/, ftp/, \r\n ftpClient/, gzip/, hal/, hdsmlinkdata/, heapStats, httpc/, i2c/, imon/, ins/, \r\n intDiag/, intrrpts/, ipc/, ipm/, irq1/, irq2/, IRQ6/, isc/, l2Services/, \r\n leds/, loadinfo/, loadMgmt/, logs/, lua/, manufacturing/, memStats, \r\n misconnection/, mmon/, mofshadow/, nbi_common_utils/, necht/, niapp/, nlc/, \r\n nncli/, oamfac/, obm/, observer/, opmCtrl/, opmCtrlFlex/, OSRP/, otdr/, \r\n owireci/, passive_slots/, pathopt/, pbe/, pdns/, PhotonicNBI/, \r\n photonicsNVSRecovery/, photonic_ots/, photop/, plog/, PM/, pm/, pmbase/, \r\n pmp/, pods/, powerAudit/, pramUtil/, ras/, RASDBGI, rdbg, rmcemon/, \r\n round_trip_delay/, rpr/, rtrvlog/, sbf/, scmpml/, secure_erase_cmn/, \r\n setpriv, shelfinfo/, shelfSync/, slc/, slotseq/, snmp/, SNMPTranslator/, \r\n socKernel/, socLa/, SONMP/, sorn/, sov/, spfpga/, spsid_dump, \r\n SpSwSubFailReason, spsync/, sptools/, svrest/, sync/, tar/, targetshell/, \r\n tcsdebug/, tdrf/, tdrfShow, teas/, telnet/, tidci/, tl1ci/, TL1EvtSeq/, \r\n tl1_to_avp/, tod/, top/, tpUtl/, tr/, trace/, tracepoints/, TRCntrl/, \r\n ts1forn/, tsam/, tsbase/, tsds3ec1/, tsemotr/, tsexer/, tsfpo/, tsl2/, \r\n tsmdd_qry/, tsm_prov/, tsm_sbf/, tsngm/, tsocn/, tsotnsw/, tsplug/, tsprot/, \r\n tsprsta/, tssmux/, tsstm1ee4/, tsxc_sbf/, ts_allocation/, ud2_fwd/, udp_fwd/, \r\n upgrade/, uptime, vbus/, vfs/, vfs_signal_debug/, vkgcct/, vkgfan/, vkginv/, \r\n vkgio/, vkgpwr/, vk_i2c_acc/, vneProxy/, vosa/, *=quit\r\n\r\nTID="Sub_6500_3":Shelf=1\r\nSlot15-docInst: unset, ome_sp2_vx_appl: OME1280.BP\r\nCommand completed at TUE JUN 07, 2022 - 04:58:42 (UTC)\r\n\r\n----> ~ uptime \r\nLast restart occurred at: FRI MAY 27, 2022 at 07:42:31 (UTC) \r\nTime since restart: 10 days 21 hrs 16 mins 13 secs\r\n\r\nActual Cumulative uptime: 489 days 7 hrs 30 mins\r\nLogged Cumulative uptime: 488 days 11 hrs 54 mins\r\n\r\nActual Continuous uptime: 118 days 15 hrs 47 mins\r\n\r\nCommand completed at TUE JUN 07, 2022 - 04:58:44 (UTC)\r\n\r\n----> '
import re
match = re.search( r'---->(. ?)---->', sample.decode(), re.S )
uptime = match[1] if match else ''
print( uptime )
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488122.html
標籤:python-3.x 字典
