以编程方式与串行终端进行交互

时间:2013-06-21 14:15:41

标签: python

假设您想为其他程序员提供一个接口,使他们能够编写如下代码:

# connect to remote Linux device
>>> conn = myClass('/dev/ttyUSB0', 115200, '8N1')
>>> conn.login('myname', 'mypass')
>>> output = conn.command('ls -al')
>>> print output
total 3
drwxr-xr-x 49 myname  myname   4096 Jun 21 15:13 .
drwxr-xr-x  4 root    root     4096 Mar 20 14:43 ..
drwxr-xr-x 49 myname  myname   1005 Jun 14 11:23 .vimrc
>>> output2 = conn.command('cd ..')
>>> print output2

>>>

您将如何实施?

当前状态

我首先考虑pyserial,但它似乎将串行连接简单地视为像对象这样的文件,而不是终端。我从它的源代码中发现 pyserial 本身使用termios,这至少似乎启用了一些类似终端的配置选项。但是哪个框架能够实现类似终端的IO? 我只是整个嵌入式系统世界的初学者,但直到现在,在我看来,通过串行连接的终端IO应该是这个环境中常见的日常问题,并且应该已经有一个框架在做“努力工作” ”。但到现在为止我找不到它。

背景

目前,我公司的大多数人都在手动测试他们的嵌入式系统开发主题。但我们希望切换到更自动的方案,其中包含许多unittest脚本。因为我们的嵌入式系统上每个UART都有一个类似接口的终端,所以我想让这些测试脚本的作者更直观地编写代码,因为他们可以通过 minicom 与设备进行交互。或屏幕无论如何。

2 个答案:

答案 0 :(得分:2)

我强烈考虑调查Twistedprojects using Twisted与终端交谈的Python项目。我见过在Twisted上写的终端屏幕抓取器,以及GitHub上的至少一个公共telnet客户端 - https://github.com/fjogstad/twisted-telnet-client

我不确定您要尝试与哪个终端接口进行通信,但这里至少是Twisted中的终端仿真器示例:https://launchpad.net/python-tvi955

使用像Twisted这样的异步框架的好处是你可以让一个测试服务器并行驱动多个虚拟机或物理机上的测试。

答案 1 :(得分:-1)

没有解决具体问题,但很可能你会谷歌它来获得以下内容:

如果您想与串行i / f进行实际交互,请考虑使用:pyserialpip install pyserial):

这是一个example

import serial

ser = serial.Serial(
    port='/dev/ttyUSB1',
    baudrate=9600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.SEVENBITS
)

ser.open()


ser.write("bla bla" + '\r')