通过 ssh 在两台计算机之间传输文件



我有两台带有Linux的计算机(让我们将它们命名为A和B((两个树莓派3(。 我需要从 B 获取文件并在 A 上查看它。 所以我用ssh连接了它们。

B 代码文件包含:

import rospy
from clever import srv
rospy.init_node('telemetry')  
file = open("telemetry", "w+")
while True:
get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry) 
position = get_telemetry(frame_id='aruco_map')
f.write(get_telemetry)

在这里调用一个rospy服务代理,然后将
必要的信息写入文件"遥测"中,我 在两个覆盆子上创建。这部分工作正常。

A 上的代码文件包含

import subprocess
while True:
subprocess.call(["ssh","pi@B", "'cat telemetry'", ">", "telemetry"])

B 是 raspbbery ip,pi 是登录

但是当我在 A 上运行代码文件时,它说"bash:cat 遥测:找不到命令" 我做错了什么? 感谢您的帮助。

使用subprocess.call时,您不需要添加额外的引号,因为空格不是分隔符。此外,由于 shell 不在本地参与,因此使用>的输出重定向不起作用。>将发送到远程主机并远程运行。要将实际的本地命令重定向到文件,必须通过传递名为stdout的参数来使用子进程PIPE输出捕获:

with open('telemetry', 'wb') as f:
subprocess.call(["ssh", "pi@B", "cat telemetry"], stdout=f)

这应该可以解决您的问题并回答您的问题"我做错了什么?"-但是,正如其他人在评论中指出的那样,您应该考虑使用scpsshfs甚至paramiko会话,而不是运行远程cat来复制文件。

我可以建议使用Python Fabric(HERE(。它非常容易配置。您只需将连接称为调用函数:

from fabric import Connection
C = fabric.Connection('IP', user='pi', connect_kwargs={"password": "raspberry"})
result = C.put('myfile', remote='/home/pi')

我用它来做同样的事情。

最新更新