我打开串口,从调制解调器读取一些参数(这里为了简单起见),关闭串口并调用sakis3g,这是一个通过串口或USB调制解调器连接到Internet的脚本。
我可以从控制台连接调用sakis3g。
代码:
# -*- coding: ISO-8859-1 -*-
import serial
import time
from subprocess import call
port = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=0)
port.open()
at_ok=False
#wait until modem answers with an OK
while at_ok==False:
port.write(bytes("AT\n", 'ISO-8859-1'))
time.sleep(.5)
r=port.read(1000)
if len(r)>0:
if r.decode("ISO-8859-1").find("OK")>0:
print ("Connected to modem")
at_ok=True
port.close()
time.sleep(1) #just in case
call(["sakis3g","connect","--pppd"])
输出:
root@raspberrypi:~# python3 /usr/test2.py
Connected to modem
Port /dev/ttyAMA0 is currently occupied by 14057 python3.
Failed to connect.
(我正在使用树莓) 编辑:我在调用之前使用了port.isOpen(),它返回False。
当我使用--debug选项时,这是sakis3g输出的一部分:
[20574] [16:57:04] We are root already. Proceeding.
[20574] [16:57:04] Device /dev/ttyAMA0 is currently occupied by 0 process(es).
[20574] [16:57:04] PID(s) are: 20542
/-------------------------------------------------------------------------------
[20574] [16:57:04] Will now run command: \'/bin/ps -p 20542 -o pid,comm= | /usr/bin/tail -1\'
/-------------------------------------------------------------------------------
20542 python3
\-------------------------------------------------------------------------------
[20574] [16:57:04] Command returned 0.
\-------------------------------------------------------------------------------
[20574] [16:57:04] Will wait for 10 seconds in case port is freed.
[20574] [16:57:05] Verbosing: 21% Waiting /dev/ttyAMA0 to be released by PID 20542 python3.
[20574] [16:57:05] Wait for another 10 seconds in case port /dev/ttyAMA0 is freed.
EDIT2: 我想我发现了问题(不是解决方案): 我制作了一个python脚本来执行以下操作: - 等待10秒钟 - 打开串口 - 再等10秒钟 - 关闭串口 - 永远等待
使用lsof|grep ttyA
我得到:
:
root@raspberrypi:~# lsof|grep ttyA
root@raspberrypi:~#
当端口打开时:
root@raspberrypi:~# lsof|grep ttyA
python3 530 root 3u CHR 204,64 0t0 9 /dev/ttyAMA0
python3 530 root 4u CHR 204,64 0t0 9 /dev/ttyAMA0
root@raspberrypi:~#
端口关闭后:
root@raspberrypi:~# lsof|grep ttyA
python3 530 root 3u CHR 204,64 0t0 9 /dev/ttyAMA0
root@raspberrypi:~#
所以pyserial或python是保持端口占用,但没有锁定?