无法索引到列表中

Jal*_*501 0 python indexing stdout list

我正在编写一个程序来读取另一个程序的输出,逐行读取并将其放入列表中.

#!/usr/bin/python

import subprocess

def RECEIVE(COMMAND):
    PROCESS = subprocess.Popen(COMMAND, stdout=subprocess.PIPE)
    LINES = iter(PROCESS.stdout.readline, "")
    for LINE in LINES:
        RECARR = LINE.split()
        print RECARR[14]

RECEIVE(["receivetest","-f=/dev/pcan32"])
Run Code Online (Sandbox Code Playgroud)

receivetest程序的输出是:

19327481.401 receivetest: m s 0x0000000663 8 2f 00 42 02 00 e4 8a 8a
19327481.860 receivetest: m s 0x000000069e 8 00 1f 5e 28 34 83 59 1a
Run Code Online (Sandbox Code Playgroud)

它是一个不断的消息流.拆分时,列表的范围是14,因为在拆分后,为了确保,我使用了:

print len(RECARR)
Run Code Online (Sandbox Code Playgroud)

这给了我一个输出14.

但每当我尝试打印最后一个元素时:

print RECARR[14]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

file "./cancheck.py", line 10, in RECEIVE
print RECARR[14]
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

这是由于列表顶部打印的一些错误文本引起的,所以我需要一些方法来确保程序只读取以

1234567.123
/^(.......\.\d{1,3}) (.*)$/
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

APe*_*son 6

根据您提供的样本数据,长度RECARR始终为14.

14是列表的大小,而不是最大索引.要获取数组的最后一个元素,您可以尝试RECARR[13]使用此列表,或者RECARR[-1]通常.

原因在于,在Python中,与大多数编程语言一样,数组索引从零开始:第一个元素被访问RECARR[0],第二个元素被访问RECARR[1],依此类推.因此,将访问第14个元素(或您的最后一个元素)RECARR[13].

所以,你的for循环看起来像这样:

for LINE in LINES:
    RECARR = LINE.split()
    print RECARR[13] # or RECARR[-1]
Run Code Online (Sandbox Code Playgroud)