摘要:所以就只能使用實現腳本進行交互,和解耦合。使用的庫和代碼由于命令行執行之后,進程一直在運行,不停的出塊,所以我將出塊的內容寫入到文件中。
背景:
最近因為工作需求在寫自動化測試腳本,主要目的是測試代碼功能的完整性,然而在使用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(),不過我沒有嘗試。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/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可以作為一門腳本...
閱讀 2008·2019-08-29 16:27
閱讀 1377·2019-08-29 16:14
閱讀 3380·2019-08-29 14:18
閱讀 3461·2019-08-29 13:56
閱讀 1260·2019-08-29 11:13
閱讀 2128·2019-08-28 18:19
閱讀 3447·2019-08-27 10:57
閱讀 2283·2019-08-26 11:39