我有两台装有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:猫遥测:未找到命令” 我究竟做错了什么? 感谢您的帮助。
答案 0 :(得分:1)
使用subprocess.call
时,您不需要添加多余的引号,因为空格不是分隔符。另外,由于外壳程序不在本地使用,因此>
的输出重定向不起作用。 >
将被发送到远程主机,并将在远程运行。要将实际的本地命令重定向到文件,必须通过传递名为PIPE
的参数来使用子进程stdout
的输出捕获:
with open('telemetry', 'wb') as f:
subprocess.call(["ssh", "pi@B", "cat telemetry"], stdout=f)
那应该可以解决您的问题,并回答您的问题“我在做什么错了?” -但是,正如其他人在评论中指出的那样,您应该考虑使用scp
,sshfs
甚至是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')
我将它用于同一件事。