摘要:所以就只能使用實(shí)現(xiàn)腳本進(jìn)行交互,和解耦合。使用的庫和代碼由于命令行執(zhí)行之后,進(jìn)程一直在運(yùn)行,不停的出塊,所以我將出塊的內(nèi)容寫入到文件中。
背景:
最近因?yàn)楣ぷ餍枨笤趯懽詣?dòng)化測試腳本,主要目的是測試代碼功能的完整性,然而在使用SSHLibrary庫進(jìn)行遠(yuǎn)程SSH交互的時(shí)候總是出現(xiàn)問題,比如說遇到需要輸入密碼的交互,總是不能成功,還有遇到一直保持運(yùn)行并實(shí)時(shí)輸出的命令,也無法讀取其中的輸出。所以就只能使用python實(shí)現(xiàn)腳本進(jìn)行交互,和SSH解耦合。 使用的庫subprocess和argparse;
代碼1:由于命令行執(zhí)行之后,進(jìn)程一直在運(yùn)行,不停的出塊,所以我將出塊的內(nèi)容寫入到文件中。
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:實(shí)現(xiàn)輸入密碼的功能
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)
臨時(shí)解救用的腳本,有幾個(gè)問題
在使用popen.stdout.read()讀取不出來內(nèi)容,只能使用popen.stdout.readline()
在使用stdout.read()和stdin.write() communicate()不能同時(shí)使用,原因可能是需要用stdout.readline(),不過我沒有嘗試。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44929.html
摘要:函數(shù)將單元格內(nèi)容以形式呈現(xiàn)。自動(dòng)評(píng)論代碼自動(dòng)注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。如果需要恢復(fù)整個(gè)已刪除的單元格,請(qǐng)按或撤消刪除單元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 編譯:小七、蔣寶尚 一些小提示和小技巧可能是非常有用的,特別是在編程領(lǐng)域。有時(shí)候使用一點(diǎn)點(diǎn)黑客技術(shù),既可...
摘要:相關(guān)鏈接官方文檔安裝推薦使用安裝,命令如下運(yùn)行完畢之后即可完成的安裝。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)數(shù)據(jù)庫的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)庫的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---4、數(shù)據(jù)庫的安裝:MySQL、MongoDB、Redis下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---6、Web庫的安裝:Flask、Tornado 在前面一節(jié)我們介紹了幾個(gè)數(shù)據(jù)庫的安裝方式,但這僅僅是用來存...
摘要:該系列文章入門,編程基礎(chǔ)概念介紹變量,條件,函數(shù),循環(huán)中的數(shù)據(jù)類型,,,,在中創(chuàng)建對(duì)象學(xué)一門編程語言正在變得越來越容易,只要念過高中甚至是初中小學(xué),能熟練聊和懂得一點(diǎn)點(diǎn)軟件的人,入門一門編程語言都不在話下。 該系列文章: 《python入門,編程基礎(chǔ)概念介紹(變量,條件,函數(shù),循環(huán))》 《python中的數(shù)據(jù)類型(list,tuple,dict,set,None)》 《在python...
摘要:零預(yù)備知識(shí)字符編碼計(jì)算機(jī)只能處理數(shù)字,所以為文本需要轉(zhuǎn)化為數(shù)字才能被計(jì)算機(jī)處理,計(jì)算機(jī)里八個(gè)比特作為一個(gè)字節(jié),這是數(shù)據(jù)的存儲(chǔ)基礎(chǔ)單位。 零、預(yù)備知識(shí) 0.1 字符編碼計(jì)算機(jī)只能處理數(shù)字,所以為文本需要轉(zhuǎn)化為數(shù)字才能被計(jì)算機(jī)處理,計(jì)算機(jī)里八個(gè)比特(bit)作為一個(gè)字節(jié)(byte),這是數(shù)據(jù)的存儲(chǔ)基礎(chǔ)單位。計(jì)算機(jī)為了處理文本,有以下三種編碼方式: ASCII碼:只有大小寫英文字母,數(shù)字...
摘要:命令行參數(shù)詳解查看的所有命令行參數(shù),使用命令。我們將會(huì)對(duì)大部分常用的命令行參數(shù)進(jìn)行一一解釋,以加深對(duì)能力的認(rèn)識(shí),更加快捷的在服務(wù)端命令行下使用或者調(diào)試各種因?yàn)閷?duì)環(huán)境不熟悉而出現(xiàn)的問題。 PHP作為一門web開發(fā)語言,通常情況下我們都是在Web Server中運(yùn)行PHP,使用瀏覽器訪問,因此很少關(guān)注其命令行操作以及相關(guān)參數(shù)的使用,但是,特別是在類Unix操作系統(tǒng)上,PHP可以作為一門腳本...
閱讀 2001·2019-08-29 16:27
閱讀 1370·2019-08-29 16:14
閱讀 3371·2019-08-29 14:18
閱讀 3454·2019-08-29 13:56
閱讀 1252·2019-08-29 11:13
閱讀 2117·2019-08-28 18:19
閱讀 3438·2019-08-27 10:57
閱讀 2272·2019-08-26 11:39