首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么方法可以告诉我们等待命令的回答吗?

有什么方法可以告诉我们等待命令的回答吗?
EN

Unix & Linux用户
提问于 2016-03-29 17:47:32
回答 1查看 1.1K关注 0票数 4

一些AT命令在wvdial中延迟返回它们的答案。这段时间取决于命令。例如,当要扫描可用网络时,可以使用AT+COPS=?命令。扫描过程大约需要30次,但是wvdial不会等到它完成并重新发送命令。在第二次尝试之后,wvdial放弃了以下错误:

代码语言:javascript
复制
# wvdial info-scan
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: AT+COPS=?
--> Re-Sending: AT+COPS=?
--> Modem not responding.

经过一段时间(30段时间),我可以通过wvdial发出另一个命令,它可以是任何东西,例如ATZ+CFUN=1,它在调制解调器已经打开时什么也不做,但是在发送命令之后,我从前一个命令中得到输出:

代码语言:javascript
复制
# wvdial modem-start
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ+CFUN=1
+COPS: (2,"T-Mobile.pl","TM PL","26002",2),(1,"T-Mobile.pl","TM
PL","26002",7),(3,"Plus","PLUS","26001",7),
(3,"Play","Play","26006",7),(3,"Orange","Orange","26003",7),
(3,"Play","Play","26006",2),(3,"Orange","Orange","26003",2),
(3,"Plus","PLUS","26001",2),,(0,1,2,3,4),(0,1,2)
OK

那么,有没有办法为这些命令设置某种超时,这样它们就可以得到延迟的答案?

EN

回答 1

Unix & Linux用户

发布于 2017-11-14 09:23:55

我通过一些技巧解决了这个问题,以创建这个python脚本,它将等待大约40秒或一分钟:

代码语言:javascript
复制
import serial
import subprocess
import time

ser = serial.Serial('/dev/modem0', 460800, timeout=2)

cmd = 'AT+COPS=0\r\n'
ser.write(cmd)
ser.sendBreak()

s = []
time_now = time.time()
while(time.time()-time_now)<=40:
    newdata = ser.read()
    if newdata is not None or newdata!="":
            global s
            s.append(newdata)
ser.close
print "".join(s)

subprocess.Popen(["wvdial"])
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/272933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档