最近因為工作需求在寫自動化測試指令碼,主要目的是測試**功能的完整性,然而在使用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)
臨時解救用的指令碼,有幾個問題 Python 命令列互動argparse
參考部落格 python之parser.add argument 用法 命令列選項 引數和子命令解析器 argparse 模組是 python 內建的乙個用於命令項選項與引數解析的模組,argparse 模組可以讓人輕鬆編寫使用者友好的命令列介面。import argparse parser arg...
命令列實現與 flask的互動
建立超級使用者 manager.option n name dest name manager.option p password dest password defcreatesuperuser name,password 建立管理員使用者 if notall name,password prin...
Ipython 互動式的Python命令列
ipython 是乙個 python 的互動式 shell,比預設的python shell 好用得多,支援變數自動補全,自動縮排,支援 bash shell 命令,內建了許多很有用的功能和函式。ipython 是基於bsd 開源的。ipython 為互動式計算提供了乙個豐富的架構,包含 強大的互動...