我确定这是一个简单的问题,但我是业余爱好,所以我在这里。
尝试使用obd python库与我的车辆进行通信。我有一个蓝牙OBDII适配器,它自己可以发送自述的基本用法部分中列出的单个命令并获得响应。
我的问题是我有一个我要发送的命令列表。我正在尝试使用for循环来遍历每个命令并在屏幕上打印响应。
import os
import time
import obd
def clear_Screen():
os.system('cls' if os.name == 'nt' else 'clear')
connection = obd.OBD("COM7")
pids = [ 'RPM' , 'ENGINE_LOAD' , 'COOLANT_TEMP' , 'RUN_TIME' ]
try:
while True:
time.sleep(1)
clear_Screen()
for i in pids:
cmd = "obd.commands." + i
response = connection.query(cmd)
print i , ": " , (response.value)
except KeyboardInterrupt:
exit()
我是如何构建cmd变量的,因为我从每个查询得到的响应是该命令不受支持,但我知道它们是。
如果我打印cmd而不是尝试使用command.query(cmd),它的打印方式就像我指定的那样,即obd.commands.RPM,所以我不明白为什么这不起作用。< / p>
答案 0 :(得分:2)
在你提出的问题中你说:
我是如何构建cmd变量
的问题
的确,以你的方式,cmd只是一个字符串。因此,如果您想要实际评估的态度,则应使用getattr
代替:
cmd = getattr(obd.commands,i)
eval()
和exec()
都不安全,所以你永远不要使用它们。
答案 1 :(得分:-2)
尝试在eval()
:
cmd = eval("obd.commands." + i)