paramiko执行nohup_记一次使用django+paramiko远程操作时报错无法返回问题

前提:

以前能力不足,只能用linux命令行形式写了个线上发布工具。采用的是paramiko来调用远程指令。

c77fb840c7227bcb0f22eeb46c3e542f.png

最近自学了点前端的东西,打算用django写一个web版的发布工具,在做正常异步远程操作时候发现都没有什么问题。

f2bac9ec6efc439cfab41c620a2454fd.png

但是当调用我们游戏的可执行文件启动时候,问题出现了:远程执行启动指令以后,无法退出。

正常情况:

74f0f5a7f60ed86d0f999db1e9496075.png
2da6b13960a58ca159de524862023f68.png

可是我们游戏的情况就是这样,有点类似于socket接口一样在等待着输入,但实际上return已经返回了。

当时问题点:

1、尝试用& nohup都无法解决问题。

2、使用>/dev/null将输出全部丢弃掉,能够退出远程连接。

3、但是我需要查看输出来确定操作结果是否正常,于是考虑到用>/tmp/XXX & cat /tmp/XXX的形式解决。这种方法是可以解决我的需求的。但是我们游戏代码结构比较复杂,又分多国家多地区多版本发布。所有地区、所有进程要各地区的开发都做这类修改的话需要一定的时间。这个方案当做备选方案。

4、直接登录到服务器上,执行admin.sh start all又能完美退出。

正式搭建中问题点:

第一种方式:

import paramikossh = paramiko.SSHClient()# 执行命令stdin, stdout, stderr = ssh.exec_command(self.echo_cmd)# 获取命令结果res = stdout.read().decode()# 获取返回状态EXIT = stdout.channel.recv_exit_status()

最开始我使用stdin,stout,stdeer形式执行指令,但是发现与shell操作类似,无法退出远程操作,一直在等待中,即使使用了return,exit等也无法退出。

第二种方式:

self.chan =self.ssh.get_transport().open_session()self.chan.exec_command(self.echo_cmd)#查看返回状态self.EXIT = self.chan.recv_exit_status()#查看返回结果self.res = self.chan.recv(10000)

然后我改用了get_transport().open_session()打开一个会话的形式。发现能完美执行完指令后退出远程连接。这时候我还高兴了一会儿,但是随后我做异常处理检查时发现问题来了。

例如:我执行一个错误指令,用第一种方式能正常获取到错误返回提示:文件或目录不存在。

57e7b57e4022b78547fd9777be94de0b.png
fa87a16484deb26858c098ebfa2f843f.png

而采用第二种get_transport().open_session()会话的方式,能够看到exit返回值不是0的状态,但是res里面确实没有任何内容的。

e4b8b4a9f47b33f4130b85df0d5df032.png
451dbff8054fcb4e66424bf2ae0f9972.png

如上测试,LS指令是不存在的,我后面查看return返回值提示不为0,但是执行结果却没有将"LS指令不存在"这个提示抓取到。

这就陷入到一个死循环了,我这游戏只有开启终端的形式才能正常执行相关admin.sh指令并退出,用类似ssh "ls" 这种远程指令形式是无法退出的。

在这里解决了查找文档搞了2个小时,最后无意间发现

stdin, stdout, stderr = ssh.exec_command(self.echo_cmd, get_pty=True)

##get_pty=True 加一个虚拟tty,问题得到解决。

后续:

我后来查了下aget_pty=True,很多人说有些场景不能用这个参数,可能会出现一些问题,我暂时还没遇到问题点,这里备注下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片动画效果html5,8个实用炫酷的HTML5图片动画应用

原标题:8个实用炫酷的HTML5图片动画应用近期我们发布了不少关于HTML5和jQuery的图片动画应用,很多都比较实用,也有一些效果非常炫酷,比如一些HTML5 3D图片动画特效。本文精选了8个实用而且炫酷的HTML5图片动画应用,希望…

ado execute open区别_二极管IN4148和IN4007的应用区别

二极管IN4148和IN4007的定义1N4148 是开关二极管,耐压100V,电流150mA,反向恢复速度快。1N4007 是普通整流二极管,耐压1000V,电流1A ,反向恢复时间在ms级别,只能用于低频电路中。二极管IN4148和I…

html列目录带图片,根据目录下的图片的个数,往html文件填充对应数量的img标签,请问有没有实现这种需求的工具?...

这直接JS就能实现了,实现方式分为【预加载】和【延迟加载】下面是个预加载的例子:首先来一个空的HTML页面和最基本的CSS初始化样式Document* {margin: 0;padding: 0;}.imgwrap li {list-style-type: none;}img {vertical-align: top;}然后我们要往标签里…

input maxlength 汉字_汉字原来这么好玩 第A15版:亲子悦读 20201104期 都市女报

山东师范大学附属小学三年级二班马荃 指导教师:范新瑞《汉字好好玩》是我非常喜欢的一套书,它的作者是台湾女作家张宏如,她毕业于台湾大学历史系,是台湾以哲学的角度研究汉字的第一人。这套书一共有5本。第一本有汉字脸谱、日月星…

将类似html数据打印机,机器人和3D打印机的架构有哪些相似之处

工业4.0参考架构模型(RAMI 4.0)以一个三维模型展示了制造业涉及的所有关键要素,在这个模型的等级层次维度(右侧水平轴)描述了一个7层的自动化层级,如图1所示,从下到上依次是:产品,现场设备,控制设备&#x…

access inner join 数据类型不匹配_用Access开发生产管理系统

刚接触Excel,自以为已经对数据的处理掌握到炉火纯青的地步了,殊不知,山外有山人外有人,自从学习了Access,才发现,原来,数据的处理还真不是我们日常工作中所遇到的那么简单。下面,我就…

html文件打开是搜索导航,GitHub - bituplink/OneHtmlNav: 单文件html的网络导航页面,简约并不简单...

OneHtmlNav这是基于小呆导航的超级精简版本,之所以投入了不少精力折腾这个导航,是之前自己网站的导航有点功能不足,看到了小呆导航有我需要的功能,但是确是基于CMS的,有点复杂我又不想再搭建一个平台,所以就…

matlab中结束脚本运行_MATLAB脱单指南

之前发过一篇文章,是关于2019年的小目标,“打浦桥锦鲤”。有留言说,发paper的……有留言说,学习python的……居然还有好多人留言说,要!脱!单!公众号的关注者,女生比例只有…

安卓手机可以改鸿蒙吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

怎样把电脑恢复出厂设置_数据蛙:苹果恢复出厂设置,彻底释放手机内存

点击蓝字关注我们苹果手机有时候用久了出现卡顿的现象,这个时候我们可以通过苹果恢复出厂设置,以让手机彻底释放内存。恢复出厂设置在哪里?恢复出厂设置后会怎样?如果您还不知道的话,在本文中数据蛙就告诉您答案&#…

html图片怎么设置行高,html行高怎么设置

html设置行高的方法:首先创建一个HTML示例文件;然后在body中通过p标签创建几行文本内容;最后通过给文本添加“line-height:20px;”样式来设置行高即可。本文操作环境:windows7系统、HTML5&&CSS3版,DELL G3电脑…

怎么从某个div跳转到另一个_另一个伊甸伊丝卡怎么样 伊丝卡使用攻略_

另一个伊甸中,伊丝卡是游戏中的四星角色之一,那么伊丝卡怎么样,下面一起来看看伊丝卡使用攻略吧。 【人物攻略】伊丝卡 LV1 - 【团队合作很重要呢】 给予敌方全体力量下降10%智慧下降10%(1回合) LV2 - 【让我来稳定战局】 给予敌方全体力量下…

html如何添加文档,如何在HTML中添加行

如何在HTML中添加行在HTML中,我们可以使用以下不同方式轻松地在文档中添加横线:使用HTML标签使用内部CSS使用HTML如果要使用Html标签在Html文档中添加水平线,则必须遵循以下步骤。使用这些步骤,我们可以轻松地添加以下行&#xff…

ffmpeg-win32-v3.2.4 下载_iTOP-4412开发板android4.4代码下载和编译

基于迅为iTOP4412开发板Android 源码可以从光盘,网盘获取稳定版本,也可以从 GitHub 下载我们的开发版本。GitHub 仅提供源码下载,不提供二进制下载,二进制文件存放在光盘和网盘中。6.3.2.1 repo 下载android 代码管理不同于 uboot…

九宫怎么排列和使用_什么是九宫飞星,九宫飞星在生活中的应用

什么是九宫飞星?如何看九宫飞星?如果您能配合老黄历的每日忌宜、时辰忌宜、时辰吉凶、五行旺衰、今日卦象、三煞七煞等资料综合应用,那么您就可以随时随地趋吉避凶、心想事成了。九星即为一白、二黑、三碧、四绿、五黄、六白、七赤、八白及九…

qt html导pdf 页眉,如何使用wkhtmltopdf unpatched qt在每个页面上添加页眉和页脚?

我能弄清楚,我工作的解决方案。它非常混乱,但它的工作原理控制器public function printPDF(Request $request){$parts Parts::all();$date $this->getTime();// divide by 36 because I can fit 36 items on each page$totalPages ceil(count($par…

sendencpac文件能删吗_“手机刷短视频”躺赚?安装自动阅读文件,开机就能挣钱?靠谱吗?...

原标题:“手机刷短视频”躺赚?安装自动阅读文件,开机就能挣钱?靠谱吗?我开始一个月赚三五十万的时候,悟出了一个道理,能做大生意千万别做小生意,能做小生意别打工,小财考…

mysql 值为0 但却被认为null_MySQL介于普通读和锁定读的加锁方式

在阅读本文前最好先看过三篇语句加锁分析文章:超全面MySQL语句加锁分析(上篇)(求转)超全面MySQL语句加锁分析(中篇)(求转)超全面MySQL语句加锁分析(下篇)(求转)事前准备为了故事的顺利发展,我们先建一个表,并向表中插入一些记录,下…

html绑定带有形参的函数,C++中函数

参数参数分为形参和实参,形参是在函数定义的形参表中进行定义,是一个变量,其作用域为整个函数。而实参出现在函数调用中,是一个表达式,用传递给函数的实参对形参进行初始化。函数形参表可以为空,但不能省略…

ppt里quicktime不可用_十大好看又实用的PPT网站

现在的社会做PPT差不多快成家常便饭了开题报告、毕业答辩、汇报总结、讲课等等但就是找不到好的模板你知道好看又实用的PPT模板要去哪里找吗下面小编就将为大家呈现几款实用的软件及网站其中海量资源,等你发现请跟着小编向下看Top1.PPT美化大师资源广场这是个小软件…