在python中通过管道读取流数据
我需要在一台计算机上连续读取和处理另一台计算机上生成的数据 到目前为止,我能够使用在python中通过管道读取流数据,python,pipe,streaming,Python,Pipe,Streaming,我需要在一台计算机上连续读取和处理另一台计算机上生成的数据 到目前为止,我能够使用mypipe将数据从第二台计算机发送到第一台计算机,方法如下: cat mypipe | ssh second_com@IP_address 'cat destfile' 这是可行的,数据现在不断地转储到destfile,但文件大小增长非常快,这不是我需要的解决方案 我想做的是将数据直接导入python脚本,而不将其写入文件。有什么建议吗 您所写的不会将数据转储到destfile。它所做的是: cat mypi
mypipe
将数据从第二台计算机发送到第一台计算机,方法如下:
cat mypipe | ssh second_com@IP_address 'cat destfile'
这是可行的,数据现在不断地转储到destfile
,但文件大小增长非常快,这不是我需要的解决方案
我想做的是将数据直接导入python脚本,而不将其写入文件。有什么建议吗 您所写的不会将数据转储到
destfile
。它所做的是:
:将名为cat mypipe
的文件的内容转储到其标准输出mypipe
:从|
获取标准输出,并将其作为标准输入发送到cat mypipe
ssh
:创建到另一个系统的ssh秒_com@IP_address
连接,并在那里运行指定的命令,同时转发其stdinssh
:在另一个系统上运行命令'cat destfile'
,该命令忽略转发的标准输入,并将名为cat destfile
的文件的内容转储到标准输出,而标准输出毫无用处destfile
cat mypipe | ssh second_com@IP_address 'cat >destfile'
区别在于:
:在另一个系统上运行命令'cat destfile'
,这样cat>destfile
只需将转发的stdin复制到其stdout,然后cat
将stdout存储在本地文件>destfile
中destfile
改变这一点的最明显的方法是将Python程序替换为
cat
。当然,您需要将程序放在远程机器上,放在可访问的地方,比如second_com
用户的主目录。然后您可以像这样执行它:
cat mypipe | ssh second_com@IP_address 'python myscript.py'
现在,在
myscript.py
内部,它可以读取sys.stdin
,这将是来自cat mypipe
(通过
和ssh
)的数据流,您可以对该数据执行任何您想执行的操作,无需先将其保存到destfile
。您所写的不会将数据转储到destfile
。你确定你不是在做ssh吗_com@IP_address“cat>destfile”
或类似的东西?TCP/UDP?这也有点取决于操作系统。一个快捷方式是使用netcat之类的东西,其中一个python进程将数据写入相应的命名管道或标准输出,另一个进程则分别在另一端读取数据。这是面向行的数据吗?文本还是二进制?像utf-8这样的编码文本?在您的目标计算机上,您可以编写一个程序,对sys.stdin中的行执行:执行处理,然后以与在目标计算机上运行cat相同的方式运行。非常感谢您的回答abarnert--我确实删除了>符号,因此您是对的。我只是按照您的建议编写了一个简单的python脚本,用于接收数据(这是二进制数据):import sys,in=sys.stdin.read(),print(len(in))。但是,使用您建议的行:(cat mypipe | ssh second_com@IP_address“python myscript.py”)使该程序在第二台机器上执行(我想从第二台机器发送数据)我需要在第一台计算机上接收和处理数据。我仍在努力解决这个问题。我需要在第一台计算机上用python处理从第二台计算机接收的数据。我理解@abarnert解决方案中python脚本的处理(在第一台计算机上)在第二台计算机上可以看到。我只想从第一台计算机发送数据,然后在第一台计算机上运行python脚本……@Steve第二台计算机当时在做什么?也许你在寻找tee
命令?或者你想把你的脚本放到mypipe
和第二台计算机之间的管道中计算机(例如,python myscript.py