在python中通过管道读取流数据

时间:2018-05-30 20:13:04

标签: python pipe streaming

我需要在另一台计算机上生成的一台计算机上不断读取和处理数据。

到目前为止,我可以使用以下内容将第二台计算机中的mypipe tosend数据用于第一台计算机:

cat mypipe | ssh second_com@IP_address 'cat destfile'

这很有效,数据现在不断地转储到destfile,但文件大小增加得非常快,这不是我需要的解决方案。

我想做的是直接将数据传输到我的python脚本而不将其写入文件。有关如何做到这一点的任何建议?

1 个答案:

答案 0 :(得分:0)

您撰写的内容不会将数据转储到destfile。它的作用是:

  • cat mypipe:将名为mypipe的文件的内容转储到其标准输出。
  • |:从cat mypipe获取标准输出并将其作为标准输出发送到ssh
  • ssh second_com@IP_address:创建与另一个系统的ssh连接,并在那里运行指定的命令,转发其stdin。
  • 'cat destfile':在另一个系统上运行命令cat destfile - 忽略转发的stdin并将名为destfile的文件的内容转储到stdout,这无处可用。

你可能拥有的更像是这样的东西:

cat mypipe | ssh second_com@IP_address 'cat >destfile'

区别在于:

  • 'cat destfile':在另一个系统上运行命令cat >destfile - 所以cat只是将转发的stdin复制到其stdout,然后>destfile导致该stdout到存储在本地文件destfile

所以结果正如你所描述的那样。

最明显的改变方法是将Python程序放在cat的位置。当然,您需要将程序放在可访问的远程计算机上,例如second_com用户的主目录。然后你可以执行它:

cat mypipe | ssh second_com@IP_address 'python myscript.py'

现在,在myscript.py内,它可以从sys.stdin读取,cat mypipe来自|(来自sshdestfile)的数据流,你可以做任何想做的事情,而不需要先将它保存到1.0.0-alpha01