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

eri*_*ork 8 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

>>>
Run Code Online (Sandbox Code Playgroud)

你会如何实施它?

当前状态

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

背景

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

pcu*_*rry 2

我强烈考虑研究Twisted以及使用 Twisted for Python 项目与终端通信的项目。我在 Twisted 上看到过一个终端屏幕抓取工具,并且在GitHub上至少看到一个公共 telnet 客户端- https://github.com/fjogstad/twisted-telnet-client

我不确定您要尝试与哪个终端接口交谈,但这里至少有一个 Twisted 中的终端模拟器的示例: https: //launchpad.net/python-tvi955

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