【问题标题】:Python : How to make a script enter and exit minicom terminal?Python:如何让脚本进入和退出 minicom 终端?
【发布时间】:2026-02-08 14:15:02
【问题描述】:

为了进入minicom并保存它的日志,我使用“sudo minicom -C nameofile”,但我想循环执行此操作,可以使用子进程打开minicom但我找不到任何退出minicom 在我的循环中并继续循环,因为您需要输入“ctrl-a,然后 x”或“ctrl-a,然后 q”,然后必须按 enter 确认。有人有什么想法或建议吗?

【问题讨论】:

  • 您希望 minicom 运行多长时间?将其作为子进程运行并从外部(从父进程)杀死如何?
  • @ArnonZilca 谢谢你的评论,很抱歉回答晚了,但我杀了它后它还能再次运行吗?我需要运行循环至少一个小时,并且必须记录 minicom,grepped 并且该行将被附加到一个列表中,然后必须关闭它,之后必须执行相同的例程。
  • 您是想要运行它、杀死它、运行它、杀死它...还是要一直运行它并对其进行采样时。配置或设备是否会从一个样本更改为另一个样本?
  • @ArnonZilca 是的,我想运行它,杀死它并使其循环运行,因为我认为如果我一直运行它,我将无法使用 Bash 来收集“ iwlist 输出数据”或 NMEA 语句
  • @ArnonZilca 不,一旦连接,它总是被视为 ttyUSB1、ttyUSB2 和 ttyUSB3,我用于为该设备收集数据的那个是 ttyUSB3,我设置并将 ttyUSB3 保存到 minicom。

标签: python linux bash loops subprocess


【解决方案1】:

第一个(也是显而易见的)解决方案

可能需要更多的努力(或不 - 你决定),这可能是 最好的 方法是 open the device yourself using pySerial (and here's an example) 然后做任何你喜欢的数据 - 将其写入文件、解析、发送给 NASA 或以上所有。 :)



如果您坚持解决该解决方案:

我能想到的一种可能性……

正在将 minicom 命令传送到tee。当您通过tee 进行管道传输时,您可以给它一个文件名(用于登录)并将tee 作为输入到您自己的二进制/脚本。那应该负责记录+解析输入。 (我没有用 minicom 尝试过,我不确定你将如何退出你的管道程序)。

我能想到的另一种可能性……

被重定向到一个文件(>),然后编写一个不同的二进制/脚本来读取正在写入的文件(就像tail -f一样)。 Here's 一个在 python 中读取文件的示例,而它正在被写入。

由于它是串行数据,我猜它很慢(尤其是 NMEA),所以我认为如果您将其写入文件并使用不同的二进制/脚本读取它,您将不会有太多延迟。

【讨论】:

  • 如果不需要使用 minicom,使用pyserial 会容易得多。所以第一个建议+1。文件写入延迟问题来自缓冲,快速数据实际上比慢速数据更容易。
  • @DrV minicom 是必需的,因为我不能直接从 python 脚本发送 AT 命令。
  • @Arnon Zilca,谢谢你的回答,我刚刚写了一个通过 pyserial 读取的代码,但它没有读取 AT 命令,它只是从 3G 模块读取一个“A”。 ser3g = serial.Serial("/dev/ttyUSB3", 115200, timeout = 5) time.sleep(1) ser3g.write("AT+CSQ ") time.sleep(1) response = ser3g.read() print >> file ,date,',',val[: 42],',',数据,',',响应
  • @Arnon Zilca ,我现在唯一想到的是在循环内捕获 minicom 终端,但我不知道如何在循环内退出 minicom,如运行它-杀死它-运行它....等等。为了捕获我所做的是 'sudo' 'minicom' '-C' 'filename' ,您知道如何循环退出 minicom 终端吗?
  • 这两种解决方案(pySerial 除外),建议您在没有 run-kill-run-kill 的情况下执行此操作。我认为将 minicom 传送到 tee 然后传送到解析器 python 脚本,或者将 minicom 重定向到文件然后在不同的进程中从文件中读取会容易得多。