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

时间:2018-08-21 19:42:18

标签: python linux ssh

我有两台装有linux(两台rapiberry pi 3)的计算机(分别命名为A和B)。 我需要从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)

在这里调用一个红润的服务代理,然后写
必要的信息放入“遥测”文件中,我 在两个覆盆子上都制成。这部分效果很好。

A上的代码文件包含

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

B是狂暴IP,而pi是登录

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

我将它用于同一件事。