python - 两台电脑之间通过 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 遥测:找不到命令”我做错了什么?感谢帮助。
解决方案
使用时subprocess.call
,不需要添加额外的引号,因为空格不是分隔符。此外,由于本地不涉及 shell,因此输出重定向>
不起作用。将>
被发送到远程主机并将远程运行。要将实际的本地命令重定向到文件,您必须PIPE
通过传递名为的参数来使用子进程输出捕获stdout
:
with open('telemetry', 'wb') as f:
subprocess.call(["ssh", "pi@B", "cat telemetry"], stdout=f)
这应该可以解决您的问题并回答您的问题“我做错了什么?” - 但是,正如其他人在评论中指出的那样,您应该考虑使用scp
,sshfs
甚至是paramiko
会话而不是运行远程cat
来复制文件。
推荐阅读
- javascript - 将鼠标悬停在 JavaScript Canvas 中的按钮上的问题
- jquery - 位于左侧的 jQuery UI 对话框按钮
- sql-server - SQL:使用循环生成 X 个临时表,然后连接 X 个临时表
- node.js - 在这里之间(节点:4216) UnhandledPromiseRejectionWarning:DiscordAPIError:无法向该用户发送消息
- python - 从另一个函数中的返回函数调用变量,但第一个返回中的变量发生变化
- javascript - E164 格式的网络表单输入字段
- fetch - 如何以编程方式从开发控制台获取与“复制为 Fetch (node.js)”相同的标头?
- swift - PhotoKit - 获取缩略图和视频数据
- java - Android Listview 最后不能滚动
- javascript - 为什么我必须点击 2 次才能运行此功能?