【发布时间】:2020-04-04 15:20:08
【问题描述】:
我想将 2 个 linux 命令链接在一起,以便命令 1 可以不断地将数据传递/流式传输到命令 2。在我的情况下,命令 1 生成一个(逐行)数据库导出,我想通过管道传输in 到命令 2(它将调用一个函数将每个数据导出行写入一个新的数据库)。
例如
command 1 | command 2
这个基于 Phyton 的解决方案看起来很不错,但也有阻塞,而且在它全部可用之后,它只是逐行读取粗壮的..How to pipe input to python line by line from linux program?
作为背景,我正在尝试导出 10 TB Cassandra db,我可以使用 dsbulk 来完成。我的想法/偏好是不建立 10 TB 的导出然后处理它,我想“在飞行中”处理它
任何指针表示赞赏,谢谢。
【问题讨论】:
-
您链接到的问题是使用 xargs,在这种情况下没有任何意义。只需使用
sys.stdin读取函数或普通input()来读取来自该管道的数据。一旦管道的上一个命令完成,Python 将在input()上引发 EOFError。 -
感谢您的回复。根据你所描述的,你认为这会解决我的问题吗?你描述的 input() 函数何时/如何被调用?好的,它是一个 Python 脚本,所以我们有类似的东西:dsbulk params.... | python perist_each_record_viaRead ?整个事情仍然阻塞,对吗?
-
我取决于读者。如果读取过程在进行任何处理之前尝试读取所有数据,那么您可能会遇到问题。如果阅读器设计得很好,它不会在进行任何处理之前尝试读取所有数据。
-
对管道的操作可能会阻塞,但询问管道是否阻塞甚至没有意义。
标签: linux