windows实时获取Ubuntu服务器图片【初级】

windows实时获取Ubuntu服务器图片【初级】

前言:

这个方法太不优雅了,如果大家有什么其他的路子的话,一定要告知一声哈~

之前由于mujoco渲染的问题,一直只能使用远程控制软件,必须在桌面启动程序。
现在在新的版本中,终于可以离线渲染图片了。
但是用VSCODE和pycharm这类远程IDE,是不能调用pygame等实时渲染的;
但有时候我们又需要,实时看一些当前仿真环境生成的图,到底成啥样了;
因此我就想着能不能建立一个通道,实现图片等文件的传递,毕竟我们拥有一个稳定的局域网通信;
上午九点开始设计的方案,就有点离谱:

1.远程脚本产生图片,存入远程服务器本地;
2.远程脚本通过subprocess启动本地脚本;
3.本地脚本通过subprocess获取服务器图片;
4.本地脚本通过pygame渲染图片;

这关键的一步被我忽略了,如何在本地脚本中获取服务器的图片?
那仍然得通过ssh通信才行;
这个通信时间还是无法忽略的。

其次,在Ubuntu中远程调用Windows下的python脚本,我一直无法实现。
最多实现ssh登录Windows,但是接下来所有的command都无法正确执行,各种报错,还找不到答案,这条路就放弃了。

最终还是选择了SCP传输文件

最终选择了scp传输文件,这个指令非常简单,之前在命令行经常使用。
但是有两个点需要注意:

正版Windows10安装ssh server

  1. 你的Windows下需要装ssh server:
    如果你的Windows10一切正常,那么就可以直接在这个教程里安装好:
    win10下添加ssh服务

其他的安装freeSSHD

  1. 如果你的Windows是db的,那就会有这样的错误:
    错误:0x80070424
  2. 这时候你需要安装freesshd
    进入download,下载freeSSHd.exe,然后安装到任意位置;
  3. 设置user,login定义你的账户名称;
  4. 选Password stored as SHA1 hash,设置好你的密码;
  5. user can shell, sftp, tunneling,都选上;
  6. 设置ssh,选择listen address,选择你的IP地址。其他的不用动;
  7. 这时候就能把Windows设置成类似于Ubuntu一样的服务器了。
  8. 要在SFTP中设置home路径,设置好了之后,文件传输就在当前目录下。

如果ssh server 无法启动,报错Permission不够什么的:

使用ssh远程登录出现Permission denied, please try again.

就要在Windows下点击此电脑,然后点击管理, 然后服务与应用程序,然后服务,然后找freeSSHDserver,重启一下这个服务。
这时候,就能点开run ssh server 了:

在这里插入图片描述

在Ubuntu测试ssh连接Windows:

类似于控制Ubuntu,直接:

ssh youruser@192.168.23.23

输入密码就差不多了。

sshpass免去单独输入密码

当然为了免去每次输入密码,可以在Ubuntu下安装下面的包:sshpass

sudo apt-get install sshpass

完了之后,远程的命令就如下格式:

sshpass -p 'your password' ssh user@192.168.23.23

python脚本中scp传输文件到Windows下

通道打开,就能通过scp传递文件到Windows下了,这时候我们把Ubuntu当成客户端,Windows当成服务器,因而是将文件上传到Windows服务器中。
在命令行中我们上传文件的教程如下:
scp 服务器之间远程复制
免输入密码的命令行如下:

sshpass -p 'your password' scp -r ssh_img.jpg lyl@192.168.23.23:

这里有一个非常诡异的问题,我无法理解,也搜不到解决方案的bug,就是上传的文件夹只能是C盘,无法切换到其他盘,就算你写了其他盘的路径,要么不报错,会在C盘初始目录,创建一个空文件。
要么就直接报错:

scp: Failed to open file /d:/.
lost connection

我意识到这个问题可能只是在freesshd中出现,因此看了一下。
果然找到了原因:要在SFTP中设置文件传输的home目录,设置好了之后,在IP地址后写什么乱七八糟的了。
在这里插入图片描述

在python脚本中执行命令行的语句:

import os
sync_cmd = "sshpass -p 'your password' scp -r ssh_img.jpg [email protected]:"
# 下面是将字符串在命令行中执行的意思
os.system(sync_cmd)

基本上0.3秒一张图,直接在Windows下的文件夹中,直接看到图片的刷新;

效果图

在这里插入图片描述

总结:

这种方法太不优雅了,虽然勉强能用。
如果大家有什么其他的好方法,一定要指条路哈~

联系方式:

ps: 欢迎做强化的同学加群一起学习:

深度强化学习-DRL:799378128

欢迎关注知乎帐号:未入门的炼丹学徒

CSDN帐号:https://blog.csdn.net/hehedadaq

极简spinup+HER+PER代码实现:https://github.com/kaixindelele/DRLib

猜你喜欢

转载自blog.csdn.net/hehedadaq/article/details/115049461