python實現命令列互動

2021-09-13 02:57:17 字數 2164 閱讀 4751

最近因為工作需求在寫自動化測試指令碼,主要目的是測試**功能的完整性,然而在使用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 為互動式計算提供了乙個豐富的架構,包含 強大的互動...