Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中通过管道读取流数据_Python_Pipe_Streaming - Fatal编程技术网

在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
    :创建到另一个系统的
    ssh
    连接,并在那里运行指定的命令,同时转发其stdin
  • 'cat destfile'
    :在另一个系统上运行命令
    cat destfile
    ,该命令忽略转发的标准输入,并将名为
    destfile
    的文件的内容转储到标准输出,而标准输出毫无用处
你可能有更像这样的东西:

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
(通过
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