摘要:所以就只能使用实现脚本进行交互,和解耦合。使用的库和代码由于命令行执行之后,进程一直在运行,不停的出块,所以我将出块的内容写入到文件中。
背景:
最近因为工作需求在写自动化测试脚本,主要目的是测试代码功能的完整性,然而在使用SSHLibrary库进行远程SSH交互的时候总是出现问题,比如说遇到需要输入密码的交互,总是不能成功,还有遇到一直保持运行并实时输出的命令,也无法读取其中的输出。所以就只能使用python实现脚本进行交互,和SSH解耦合。 使用的库subprocess和argparse;
代码1:由于命令行执行之后,进程一直在运行,不停的出块,所以我将出块的内容写入到文件中。
import subprocess import sys import argparse class TimeoutError(Exception): pass def excuteCmd(cmd): popen = subprocess.Popen(cmd,stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell = True) while True: buff = popen.stdout.readline() fh = open("/home/ubuntu/bottos/bottos.txt", "a+") fh.write(buff) sys.stdout.write(buff) if buff == "" and popen.poll() != None: break if __name__ == "__main__": """ self test """ parser = argparse.ArgumentParser(description="manual to this script") parser.add_argument("--delegate", type=str,default=None) args = parser.parse_args() try: bottos = "/home/ubuntu/bottos/bottos " cmd = bottos + "--delegate " + args.delegate + " --enable-wallet" ret = excuteCmd(cmd) print ret except TimeoutError, e: print repr(e)
代码2:实现输入密码的功能
import subprocess import argparse class TimeoutError(Exception): pass def excuteCmd(cmd, passwd, timeout = 1): s = subprocess.Popen(cmd,stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell = True) s.stdin.write(passwd+" ") out, err = s.communicate() if err is not None: return err return out if __name__ == "__main__": """ self test """ parser = argparse.ArgumentParser(description="manual to this script") parser.add_argument("--name", type=str,default=None) parser.add_argument("--passwd", type=str,default=None) args = parser.parse_args() try: unlock = "/home/ubuntu/bottos/bcli wallet unlock " cmd = unlock + "--account " + args.name ret = excuteCmd(cmd,args.passwd,5) print ret except TimeoutError, e: print repr(e)
临时解救用的脚本,有几个问题
在使用popen.stdout.read()读取不出来内容,只能使用popen.stdout.readline()
在使用stdout.read()和stdin.write() communicate()不能同时使用,原因可能是需要用stdout.readline(),不过我没有尝试。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44929.html
摘要:函数将单元格内容以形式呈现。自动评论代码自动注释单元格中的选定行,再次命中组合将取消注释相同的代码行。如果需要恢复整个已删除的单元格,请按或撤消删除单元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 编译:小七、蒋宝尚 一些小提示和小技巧可能是非常有用的,特别是在编程领域。有时候使用一点点黑客技术,既可...
摘要:相关链接官方文档安装推荐使用安装,命令如下运行完毕之后即可完成的安装。上一篇文章网络爬虫实战数据库的安装下一篇文章网络爬虫实战库的安装 上一篇文章:Python3网络爬虫实战---4、数据库的安装:MySQL、MongoDB、Redis下一篇文章:Python3网络爬虫实战---6、Web库的安装:Flask、Tornado 在前面一节我们介绍了几个数据库的安装方式,但这仅仅是用来存...
摘要:该系列文章入门,编程基础概念介绍变量,条件,函数,循环中的数据类型,,,,在中创建对象学一门编程语言正在变得越来越容易,只要念过高中甚至是初中小学,能熟练聊和懂得一点点软件的人,入门一门编程语言都不在话下。 该系列文章: 《python入门,编程基础概念介绍(变量,条件,函数,循环)》 《python中的数据类型(list,tuple,dict,set,None)》 《在python...
摘要:命令行参数详解查看的所有命令行参数,使用命令。我们将会对大部分常用的命令行参数进行一一解释,以加深对能力的认识,更加快捷的在服务端命令行下使用或者调试各种因为对环境不熟悉而出现的问题。 PHP作为一门web开发语言,通常情况下我们都是在Web Server中运行PHP,使用浏览器访问,因此很少关注其命令行操作以及相关参数的使用,但是,特别是在类Unix操作系统上,PHP可以作为一门脚本...
阅读 1984·2019-08-29 16:27
阅读 1344·2019-08-29 16:14
阅读 3350·2019-08-29 14:18
阅读 3417·2019-08-29 13:56
阅读 1232·2019-08-29 11:13
阅读 2098·2019-08-28 18:19
阅读 3417·2019-08-27 10:57
阅读 2240·2019-08-26 11:39