簡體   English   中英

通過SSH在兩台計算機之間傳輸文件

[英]File transmission between two computers via 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上運行代碼文件時,它說:“打擊:貓遙測:未找到命令”我在做什么錯? 感謝幫助。

使用subprocess.call ,您不需要添加多余的引號,因為空格不是分隔符。 另外,由於外殼未在本地涉及,所以>輸出重定向不起作用。 >將發送到遠程主機,並將遠程運行。 要將實際的本地命令重定向到文件,必須通過傳遞名為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')

我將它用於同一件事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM