subprocess.check_output逻辑错误

时间:2015-12-11 23:44:24

标签: python python-2.7 subprocess

我使用subprocess.check_output运行Xyce(SPICE模拟器)模拟,因为我想将其结果用于进一步分析。

以下是我正在使用的代码:

x=subprocess.check_output(['./Xyce','Circuit.cir'])
volt=[]
for i in range(1,4): 
    start=x.find('FINAL_COL{}_VOLT = ' .format(i)) + 18

    end=x.find('Measure Start Time')

    volt.append(x[start:end])
print colored ('volt=','cyan')  

以下是我为Xyce模拟得到的日志:

FINAL_COL1_VOLT = 0.0145203
Measure Start Time= 0   Measure End Time= 1
FINAL_COL2_VOLT = 0.0176678
Measure Start Time= 0   Measure End Time= 1
FINAL_COL3_VOLT = 0.0811186
Measure Start Time= 0   Measure End Time= 1

我收到的结果为volt=[' 0.0145203\n','',''],我希望得到volt=[' 0.0145203\n',' 0.0176678\n',' 0.0811186\n']。我做了一些调试,我发现问题是我的end,因为'Measure Start Time'在每次结果后都会重复。因此,当我尝试将我的结束更改为另一个字符串代码时,但当然没有给我所需的输出,因为我在获得VOLT值后没有停止。

所以,关于如何解决这个问题的想法。

提前致谢

2 个答案:

答案 0 :(得分:3)

您没有为find Measure Start Time提供偏移。将第二个find更改为:

end=x.find('Measure Start Time', start)

并且end的搜索将从您标识的start开始,而不是字符串的开头(始终找到相同的end)。

答案 1 :(得分:1)

如果你想要所有电压re可能是更好的方法:

lines = """FINAL_COL1_VOLT = 0.0145203
Measure Start Time= 0   Measure End Time= 1
FINAL_COL2_VOLT = 0.0176678
Measure Start Time= 0   Measure End Time= 1
FINAL_COL3_VOLT = 0.0811186
Measure Start Time= 0   Measure End Time= 1"""

import re

print(re.findall(r"(?<=_VOLT =\s)\d+\.\d+", lines))
['0.0145203', '0.0176678', '0.0811186']

或者分割拉出所需线条的线条:

print([line.split()[-1] for line in lines.splitlines() if line.startswith("FINAL")])
['0.0145203', '0.0176678', '0.0811186']