linux - 循环IO重定向

标签 linux io

我有一个进程,我在我的 shell 上启动它打印出数据,我有一个 python 脚本来计算它并将其返回给进程。我该怎么做?

我知道使用 pipe> 可以在一方面帮助我,但我怎样才能实现双向重定向?

类似于:my_process |我的脚本 | my_process 合法吗?

我想要发生的事情:

  1. 从 shell 启动进程
  2. 进程将数据发送到我的脚本(而不是将其打印到 STDOUT)
  3. 我的脚本返回处理的答案(而不是将其打印到 标准输出)
  4. 回到第2步

最佳答案

它可以用 FIFO 模拟(或者如果您使用的是 python,您可以使用管道系统调用创建自己的管道,并根据您的安排重定向它们)。

一些示例代码:

#!/bin/sh
#note: the resource management and error handling here is not very clean or robust
mkfifo fifo0 fifo1
exec 3<>fifo0
exec 4<>fifo1
rm -f fifo0 fifo1
many()
{
    i=0
    while [ $i -lt $1 ]; do
        echo -n x
        i=$((i+1))
    done
    echo
}
proc1()
{
    ulimit_p=$(ulimit -p)
    while :; do
        echo proc1_msg
        echo >&2 proc1_written=proc1_msg
        read var
        echo >&2 proc1_read=$var
        sleep 1
    done
}

proc2()
{
    while :; do
        read var
        echo >&2 proc2_read=$var
        echo proc2_msg
        echo >&2 proc2_written=proc2_msg
    done
}
pid=0
trap 'echo kill $pid; kill $pid; exit 130' INT
proc1 <&3 >&4 & pid=$!
proc2 <&4 >&3

关于linux - 循环IO重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45080515/

相关文章:

Linux shell 输出命令到文件

io - 保存许多不同形状的张量的最佳方法?

Java:替换部分文件而不用再次写入整个文件

c - 读取文件的线程安全

c - 拦截系统调用

linux - 允许非特权用户运行特定命令

java - Java 中第一次尝试序列化很慢?

io - 用 lisp 将列表写入文件

mysql - 如何在 MySql 查询上设置超时?

c++ - 使用 make 构建我的项目