Python没有发布串口

时间:2015-04-09 19:53:22

标签: python pyserial

我打开串口,从调制解调器读取一些参数(这里为了简单起见),关闭串口并调用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是保持端口占用,但没有锁定?

0 个答案:

没有答案