[英]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)
那應該可以解決您的問題,並回答您的問題“我在做什么錯了?” -但是,正如其他人在評論中指出的那樣,您應該考慮使用scp
, sshfs
甚至是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.