来自linux命令outpu的python返回列表

2024-10-01 09:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,学习很快,但这超出了我目前的理解水平。我试图将linux命令apccess的输出拉到python中的列表中。在

apccess是一个linux命令,用于获取APC UPS的状态。输出如下:

$ apcaccess
APC      : 001,035,0933
DATE     : 2014-11-12 13:38:27 -0500  
HOSTNAME : doormon
VERSION  : 3.14.10 (13 September 2011) debian
UPSNAME  : UPS
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2014-11-12 12:28:00 -0500  
MODEL    : Back-UPS ES 550G 
STATUS   : ONLINE 
LINEV    : 118.0 Volts
LOADPCT  :  15.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  46.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 092.0 Volts
HITRANS  : 139.0 Volts
ALARMDEL : 30 seconds
BATTV    : 13.6 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 2
XONBATT  : 2014-11-12 12:33:35 -0500  
TONBATT  : 0 seconds
CUMONBATT: 53 seconds
XOFFBATT : 2014-11-12 12:33:43 -0500  
STATFLAG : 0x07000008 Status Flag
SERIALNO : 4B1335P17084  
BATTDATE : 2013-08-28
NOMINV   : 120 Volts
NOMBATTV :  12.0 Volts
FIRMWARE : 904.W1 .D USB FW:W1
END APC  : 2014-11-12 13:38:53 -0500

我尝试过Popen的不同迭代,例如:

^{pr2}$

我希望能够将每一行放入一个包含所有32个元素的列表或元组中,然后只显示/打印我需要的内容,比如TIMELEFT和{}。在

任何帮助都将不胜感激。在


Tags: 命令列表linux水平w1usbsecondspercent
3条回答
from subprocess import check_output
out = check_output(["apcaccess"])

spl = [ele.split(":",1)for ele in out.splitlines()]
d = {k.rstrip():v.lstrip() for k,v in spl}

print(d['BCHARGE'])
print(d["TIMELEFT"])
100.0 Percent
46.0 Minutes


from subprocess import check_output
def get_apa():
    out = check_output(["apcaccess"])
    spl = [ele.split(":", 1) for ele in out.splitlines()]
    d = {k.rstrip(): v.lstrip() for k, v in spl}
    return d

output = get_apa()
print (output['BCHARGE'])
100.0 Percent

要打印所有键/值对:

^{pr2}$

您需要的是subprocess模块

import subprocess
child = subprocess.Popen('apcaccess',stdout=subprocess.PIPE)
msg,err = child.communicate()
print(msg.split())

已经有了如何将命令的输出转换成python的答案。在

目前还不清楚您将如何处理输出。也许,字典(dict)比列表更适合你:

# stolen from Hackaholic's answer
import subprocess
child = subprocess.Popen('apcaccess',stdout=subprocess.PIPE)
msg,err = child.communicate()

# now create the dict:
myDict={}
#for i in msg.split("\n"):  # loop over lines
for i in msg.splitlines():  # EDIT: See comments  
    splitted=i.split(":")  # list like ["HOSTNAME ", " doormon"]
    # remove leading & trailing spaces, add to dict
    myDict[splitted[0].strip()]=splitted[1].strip() 


#Now, you can easily access the items:
print myDict["SERIALNO"]
print myDict["STATUS"]
print myDict["BATTV"]

for k in myDict.keys():
    print k +" = "+ myDict[k]

相关问题 更多 >