我有一个连接到串行通信端口的仪器。我在windowsxp中使用python3.2,外加pySerial模块。当我执行一个由一系列语句组成的脚本时,我遇到了一个问题,这些语句打开comm端口,配置它,向它写入字符串并从中接收字符串。这些字符串要么是与乐器相关的命令(控制),要么是来自乐器的响应(响应)。在
当这些语句在python解释器中以交互方式执行时(at>;gt;),我得到了我期望的结果,并且结果是好的和正确的。然而,当我在解释器中或从shell中执行脚本时,我并没有得到我想要的结果。脚本中的语句与我在交互式解释器中使用的语句相同。在
为什么我会得到奇怪的行为,我如何改变脚本,使其行为像在交互式解释器?在def read(comport):
wrt_str=b'movt 3000'+b'\r\n'
ret_str=comport.write(wrt_str)
wrt_str=b'scan'+b'\r\n'
ret_str=comport.write(wrt_str)
rsp_str=comport.readlines() #########1
wrt_str=b'hllo'+b'\r\n'
ret_str=comport.write(wrt_str)
rsp_str=comport.readlines()#########2
问题出在上面的行中。在交互模式下,#1处约有1秒延迟,#2处约有9秒延迟。我在那里得到了正确的回答。但是,如果我执行上面的脚本,就不会有任何延迟,并且会得到错误的结果(垃圾)。我在comm port set设置中将读取超时设置为0,如下所示:
^{pr2}$
因此,如果comport等待行结束或文件结束,它应该处于阻塞模式
更新(2011年8月19日)
我更新了几天前的原始帖子。我想我知道问题所在,想知道是否有人能找到解决办法:
把“print”和时间。睡觉(delay)“在每个语句之后,我发现当脚本运行时,它似乎围绕着pyserial语句,例如”撰写(..“或”复合阅读线(…)“在执行pyserial命令时(显示为等待和忙着做一些事情,您知道串行端口很慢)。例如,当我在python交互式shell中执行所有语句时,如果前一个语句没有返回,我就无法键入并运行新语句。我们来吧,如果复合阅读线()未返回,我无法键入并运行下一个撰写(…)状态。但是,在正在运行的脚本中,如果复合阅读线()正忙于读取,下一条语句正在运行,如果下一条语句恰好是撰写()将中止读取。在
有没有什么方法可以强制python脚本像按顺序运行一样?在