python语句可以采用交互式执行方式_如何使python脚本中的语句的行为与在交互式sh中执行的语句一样...

在Windows XP上使用Python 3.2和pySerial模块进行串行通信时,作者发现通过脚本执行的命令与在交互式解释器中输入的命令行为不同。在交互模式下,命令按预期工作,但在脚本中,由于缺乏延迟,导致读写操作交错,从而产生错误结果。作者认为问题可能在于脚本执行速度过快,使得串行通信的读写操作没有按顺序进行。寻求解决方案以确保脚本执行时能像交互模式那样顺序处理串行通信。
摘要由CSDN通过智能技术生成

我有一个连接到串行通信端口的仪器。我在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脚本像按顺序运行一样?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值