首页 > 解决方案 > 两台电脑之间通过 ssh 传输文件

问题描述

我有两台装有 linux 的计算机(让它们命名为 A 和 B)(两个 raspberry pi 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 是树莓派 ip,pi 是登录名

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

标签: pythonlinuxssh

解决方案


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

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

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


推荐阅读