【问题标题】:Interacting programmatically with serial terminal以编程方式与串行终端交互
【发布时间】:2019-05-15 06:00:24
【问题描述】:

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

# 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 与设备进行交互或 screen 反正。

【问题讨论】:

  • 正确地将终端视为文件。你写它,你读它;你和它没什么关系。我想你对在你的应用程序中处理硬件流控制不感兴趣。在此基础上,创建您想要的内容相对容易:写到 EOL,读到 EOF,冲洗,重复。

标签: python


【解决方案1】:

对于与终端对话的 Python 项目,我强烈考虑研究 Twistedprojects using Twisted。我在 Twisted 上看到过一个终端屏幕抓取工具,在 GitHub - https://github.com/fjogstad/twisted-telnet-client 上至少有一个公共 telnet 客户端。

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

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

【讨论】:

  • edit:我的问题如下,但我想我可以自己用谷歌搜索。 “嗯,我怎么知道设备说的是哪个终端接口?”
  • 我不知道,我在 Twisted 及其周围的工作主要是异步 HTTP 交互,而不是编写 TTY 接口代码。 Twisted 的 API 文档在这里 - twistedmatrix.com/documents/current/api/twisted.html - 看起来 conch 是他们选择的 shell 模拟器,通过 SSH 工作。
【解决方案2】:

没有解决具体问题,但您很可能通过谷歌搜索得到以下信息:

如果您想实际与串行 i/f 交互,请考虑使用:pyserial (pip 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')

【讨论】:

  • 没错,但我仍然认为在这里作为答案很有帮助。
猜你喜欢
  • 1970-01-01
  • 2021-08-31
  • 2012-08-04
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多