subprocess.check_output逻辑错误
subprocess.check_output logical error
我是 运行 Xyce(SPICE 模拟器)仿真使用 subprocess.check_output
因为我想用它的结果做进一步的分析。
这是我使用的代码:
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
值后没有停止。
所以,关于如何解决这个问题的想法。
提前致谢
您没有为 Measure Start Time
的 find
提供偏移量。将第二个 find
改为:
end=x.find('Measure Start Time', start)
并且搜索 end
将从您确定的 start
开始,而不是字符串的开头(它总是找到相同的 end
)。
如果你想要所有的电压 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']
我是 运行 Xyce(SPICE 模拟器)仿真使用 subprocess.check_output
因为我想用它的结果做进一步的分析。
这是我使用的代码:
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
值后没有停止。
所以,关于如何解决这个问题的想法。
提前致谢
您没有为 Measure Start Time
的 find
提供偏移量。将第二个 find
改为:
end=x.find('Measure Start Time', start)
并且搜索 end
将从您确定的 start
开始,而不是字符串的开头(它总是找到相同的 end
)。
如果你想要所有的电压 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']