【发布时间】:2013-04-27 11:36:21
【问题描述】:
我有一个 python 代码,它可以向设备发送串行命令并从中获得回复。
def control(command):
serialport= serial.Serial ("/dev/ttyAMA0", 9600, timeout=0.5)
serialport.write(command)
return serialport.readlines(1)
我有一本字典,它映射了一些要传递给command 的代码。然后我会把回复打印出来。
response = control(code_map.get(key,None))
print response, type(response)
编辑:打印输出的示例是['\x03O?0201\r'] <type 'list'>
收到回复后,我必须检查回复中的某些字符:
if "O?" in response[0]:
if "01" in response[0]:
if "0100" in response[0]:
status="off"
else:
status="on"
else:
status="off"
如果只回复一次就可以了。但是当有 2 个或更多请求时,它会引发索引错误并且不会显示状态。
这是我的 javascript 发布并获得状态回复:
$('#monitor').click(function(){
setInterval(function(){
$('#status_table tr [id^="monitor_"]:checked').each(function () {
monitoring($(this).parents('tr'));
});
},15000);
});
function monitoring($row) {
$('#test').append("checked");
fbType = $row.find('td:nth-child(3)').html();
fbNum = $row.find('td:nth-child(4)').html();
eachStatus =$row.find('td:nth-child(5)').attr('id');
$('#test').append(fbType + ' '+ fbNum+' '+ eachStatus +'<br>');
$.post('/request', {inputText: fbNum,key_pressed: fbType.toString()}).done(function (reply) {
if (reply == "on") {
$('#status_table tr #status_'+eachStatus).append("on");
$('#test').append("on");
} else if (reply =="off") {
$('#status_table tr #'+eachStatus).empty().append("off");
$('#test').append("off");
}
});
}
追溯:
[03/May/2013:14:36:35] HTTP Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 656, in respond
response.body = self.handler()
File "/usr/local/lib/python2.7/dist-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/lib/encoding.py", line 188, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cpdispatch.py", line 34, in __call__
return self.callable(*self.args, **self.kwargs)
File "remote_control_keypad_new52.py", line 677, in request
if "O?" in response[0]:
IndexError: list index out of range
[03/May/2013:14:36:35] HTTP
Request Headers:
Content-Length: 31
REFERER: http://localhost:8080/
HOST: localhost:8080
ORIGIN: http://localhost:8080
CONNECTION: Keep-Alive
Remote-Addr: 127.0.0.1
ACCEPT: */*
USER-AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.22+ Midori/0.4
X-REQUESTED-WITH: XMLHttpRequest
ACCEPT-LANGUAGE: en-us;q=0.750
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
ACCEPT-ENCODING: gzip, deflate
127.0.0.1 - - [03/May/2013:14:36:35] "POST /request HTTP/1.1" 500 1460 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.22+ Midori/0.4"
['\x03O?0101\r\x03O?0201\r'] <type 'list'>
on
127.0.0.1 - - [03/May/2013:14:36:36] "POST /request HTTP/1.1" 200 2 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.22+ Midori/0.4"
Button one is assigned with Response number None
Button one is assigned with Response number None
Button one is assigned with Response number None
output number selected is 01
R!None
R!None
R!None
R!None
Button one is assigned with Response number None
Button one is assigned with Response number None
Button one is assigned with Response number None
output number selected is 02
R!None
R!None
R!None
R!None
[03/May/2013:14:36:50] HTTP Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cprequest.py", line 656, in respond
response.body = self.handler()
File "/usr/local/lib/python2.7/dist-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/lib/encoding.py", line 188, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cpdispatch.py", line 34, in __call__
return self.callable(*self.args, **self.kwargs)
File "remote_control_keypad_new52.py", line 674, in request
response = comfort_control(code_map.get(key,None))
File "remote_control_keypad_new52.py", line 639, in comfort_control
return serialport.readlines(1)
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 456, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
SerialException: device reports readiness to read but returned no data (device disconnected?)
[03/May/2013:14:36:50] HTTP
Request Headers:
Content-Length: 31
REFERER: http://localhost:8080/
HOST: localhost:8080
ORIGIN: http://localhost:8080
CONNECTION: Keep-Alive
Remote-Addr: 127.0.0.1
ACCEPT: */*
USER-AGENT: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.22+ Midori/0.4
X-REQUESTED-WITH: XMLHttpRequest
ACCEPT-LANGUAGE: en-us;q=0.750
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
ACCEPT-ENCODING: gzip, deflate
127.0.0.1 - - [03/May/2013:14:36:50] "POST /request HTTP/1.1" 500 1839 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.22+ Midori/0.4"
['\x03O?0101\r\x03O?0201\r'] <type 'list'>
on
127.0.0.1 - - [03/May/2013:14:36:51] "POST /request HTTP/1.1" 200 2 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.22+ Midori/0.4"
^C[03/May/2013:14:36:56] ENGINE Keyboard Interrupt: shutting down bus
[03/May/2013:14:36:56] ENGINE Bus STOPPING
【问题讨论】:
-
在中断的情况下,
print response打印什么? -
类似 ['\x03O?0101\r']
-
如果是这种情况,
response[0]无法引发 IndexError。你能显示你的完整回溯 -
对不起,什么是回溯?是cmd窗口上的吗?是的,它只回复一次就可以了……
-
好的,添加回溯:)
标签: javascript python list indexing