【问题标题】:real time communication between two scripts link by pipe两个脚本之间通过管道链接的实时通信
【发布时间】:2017-07-24 06:31:15
【问题描述】:

我有两个脚本,我想让它们在交互式设备上进行通信。 所以我做到了:

./script1 | ./script2.py

我的 script1 是用 c++ 完成的(我有源代码),而 script2 是我用 python 制作的一个脚本,用于解释 script1 的输出并写入串行端口。

我的问题是,过了一会儿,所有进程开始变慢。我已经分别测试了每个脚本它的工作原理......(不减慢速度)它可能来自通信吗? 我还有其他选择吗?它是否存在一种“强制”执行并始终采用 script1 的最后输出的方法?

【问题讨论】:

  • 您可以查看Unix socketsMPI 也是进程间通信的一个选项。
  • 谢谢,但 MPI 似乎适用于多处理器,这不是我的情况,如果我使用套接字,我如何在不修改的情况下接收 script1 的输出?
  • MPI 用于与多个进程es 进行通信,不需要将所有进程调度在同一个 CPU 上;它不需要多个进程or 即可工作。
  • @Dadep AFAIK 您必须修改脚本才能使用套接字。另一种选择是将script1 的标准输出重定向到script2 的标准输入。为此,您首先启动python script2.py &,它将为您提供进程号。然后您可以启动./script1 > /proc/<process-number>/fd/0,这是script2 的标准输入(但这需要sudo)。另请参阅this answer
  • @Dadep 您还可以通过辅助文件执行通信。也就是说,您将输出从script1 重定向到一个文件:./script1 > aux_file,然后您可以直接从该文件(从代码中)读取script2.py,或者将tail -f 传递给它:tail -f aux_file | ./script2.py(但是我不确定第二种方法是否与您已经完成的完全不同)。

标签: python c++ bash pipe real-time


【解决方案1】:

这可能是因为缓冲。试试:

stdbuf -i0 -o0 -e0 python -u ./script1.py | stdbuf -i0 -o0 -e0 python -u ./script2.py

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 2013-04-19
    • 1970-01-01
    • 2013-07-30
    • 2010-12-26
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多