【问题标题】:How to interact with other terminals?如何与其他终端交互?
【发布时间】:2015-09-29 20:21:59
【问题描述】:

我有 2 个终端窗口,T1 和 T2。 T1 运行一个监控应用程序,并且必须全时运行。

T2(一个 bash 脚本)用于控制 T1 并告诉 T1 开始扫描。 我的问题是我想编写一个开始扫描的脚本,但我需要知道扫描何时完成才能在 T2 中正确继续脚本。

开始扫描时,唯一的反馈是在 T1 中,当扫描完成时,T1 说“Succuess...”,在 T2 中没有反馈。

有没有办法写一个脚本来读出T1的成功信息?

干杯

【问题讨论】:

  • 我会说这与终端本身无关,而是您需要某种方式与监控程序进行通信,例如管道或套接字。
  • T2 如何告诉 T1 准确开始扫描?
  • @MarkSetchell T2 启动一个 python 脚本。结果显示在 T1 中。

标签: bash ubuntu terminal


【解决方案1】:

脑海中浮现出一些想法……

  • 如果 python 脚本开始扫描,大概它知道扫描何时完成以及它是否有效 - 即它的退出状态。如果是这种情况,您可以修改 python 脚本以将扫描的退出状态写入名为exitstatus.txt 的文件并从 T2 监视该文件,或者在执行相同操作的 python 脚本周围放置一个包装器。请注意,要使其正常工作,您需要在开始每次扫描之前删除 exitstatus.txt 文件。

  • 另一个想法可能是将扫描命令的输出通过管道传输到 tee 并从那里传输到文件并从 T2 读取该文件。

  • 另一个想法可能是在扫描之前在 T2 中运行命令 tty 以获取终端的设备特殊文件名 - 类似于 /dev/ttys001。将其作为 Python 脚本的参数传递给 T1,然后它可以使用如下命令在终端 T2 上写入:

    echo Success > /dev/ttys001

【讨论】:

    【解决方案2】:

    您可以将命名管道用于 IPC。在一个终端上试试这个:

    mkfifo /tmp/fifo && read LINE < /tmp/fifo && echo $LINE; unlink /tmp/fifo
    

    在另一个终端:

    echo foo > /tmp/fifo
    

    使用套接字和 netcat 可能更容易进行双向通信。

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2014-11-07
      • 2018-05-07
      • 1970-01-01
      • 2012-05-15
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多