python实现命令行交互
背景:
最近因为工作需求在写自动化测试脚本,主要目的是测试代码功能的完整性,然而在使用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+'\n') 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()
,不过我没有尝试。
相关推荐
吹云 2020-11-05
84407805 2020-11-01
曾是土木人 2020-10-31
87201442 2020-10-15
java0 2020-09-29
81437716 2020-09-18
81437716 2020-09-13
bluecarrot 2020-09-11
myCat 2020-09-09
83427718 2020-09-07
85560694 2020-09-03
89520991 2020-08-21
89550191 2020-08-09
katie000 2020-08-04
hunningtu 2020-07-30
89961330 2020-07-28
yuzhongdelei0 2020-07-28
yuzhongdelei0 2020-07-27