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

2024-05-19 13:59:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

到目前为止,我能够使用mypipe将数据从第二台计算机发送到第一台计算机,方法如下:

cat mypipe | ssh second_com@IP_address 'cat destfile'

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

我想做的是直接将数据通过管道传输到python脚本中,而不用将其写入文件。有什么建议吗?在


Tags: 数据方法ip脚本com管道address计算机
1条回答
网友
1楼 · 发布于 2024-05-19 13:59:31

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

  • cat mypipe:将名为mypipe的文件的内容转储到其stdout。在
  • |:从cat mypipe获取stdout并将其作为stdin发送到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,然后{}将stdout存储在本地文件destfile。在

所以结果就是你所描述的那样。在


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

^{pr2}$

现在,在myscript.py中,它可以从sys.stdin读取,这将是来自cat mypipe(通过|ssh)的数据流,您可以对该数据执行任何您想做的事情,而不需要先将其保存到destfile。在

相关问题 更多 >