国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python實現命令行交互

zhangke3016 / 1819人閱讀

摘要:所以就只能使用實現腳本進行交互,和解耦合。使用的庫和代碼由于命令行執行之后,進程一直在運行,不停的出塊,所以我將出塊的內容寫入到文件中。

背景:
最近因為工作需求在寫自動化測試腳本,主要目的是測試代碼功能的完整性,然而在使用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

相關文章

  • 收藏 | 10個可以快速用Python數據分析的小技巧

    摘要:函數將單元格內容以形式呈現。自動評論代碼自動注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。如果需要恢復整個已刪除的單元格,請按或撤消刪除單元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 編譯:小七、蔣寶尚 一些小提示和小技巧可能是非常有用的,特別是在編程領域。有時候使用一點點黑客技術,既可...

    silvertheo 評論0 收藏0
  • Python3網絡爬蟲實戰---5、存儲庫的安裝:PyMySQL、PyMongo、RedisPy、R

    摘要:相關鏈接官方文檔安裝推薦使用安裝,命令如下運行完畢之后即可完成的安裝。上一篇文章網絡爬蟲實戰數據庫的安裝下一篇文章網絡爬蟲實戰庫的安裝 上一篇文章:Python3網絡爬蟲實戰---4、數據庫的安裝:MySQL、MongoDB、Redis下一篇文章:Python3網絡爬蟲實戰---6、Web庫的安裝:Flask、Tornado 在前面一節我們介紹了幾個數據庫的安裝方式,但這僅僅是用來存...

    AlanKeene 評論0 收藏0
  • python入門,編程基礎概念介紹(變量,條件,函數,循環)

    摘要:該系列文章入門,編程基礎概念介紹變量,條件,函數,循環中的數據類型,,,,在中創建對象學一門編程語言正在變得越來越容易,只要念過高中甚至是初中小學,能熟練聊和懂得一點點軟件的人,入門一門編程語言都不在話下。 該系列文章: 《python入門,編程基礎概念介紹(變量,條件,函數,循環)》 《python中的數據類型(list,tuple,dict,set,None)》 《在python...

    Bryan 評論0 收藏0
  • python入門

    摘要:零預備知識字符編碼計算機只能處理數字,所以為文本需要轉化為數字才能被計算機處理,計算機里八個比特作為一個字節,這是數據的存儲基礎單位。 零、預備知識 0.1 字符編碼計算機只能處理數字,所以為文本需要轉化為數字才能被計算機處理,計算機里八個比特(bit)作為一個字節(byte),這是數據的存儲基礎單位。計算機為了處理文本,有以下三種編碼方式: ASCII碼:只有大小寫英文字母,數字...

    xeblog 評論0 收藏0
  • PHP命令下的世界

    摘要:命令行參數詳解查看的所有命令行參數,使用命令。我們將會對大部分常用的命令行參數進行一一解釋,以加深對能力的認識,更加快捷的在服務端命令行下使用或者調試各種因為對環境不熟悉而出現的問題。 PHP作為一門web開發語言,通常情況下我們都是在Web Server中運行PHP,使用瀏覽器訪問,因此很少關注其命令行操作以及相關參數的使用,但是,特別是在類Unix操作系統上,PHP可以作為一門腳本...

    calx 評論0 收藏0

發表評論

0條評論

zhangke3016

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<