簡體   English   中英

如何實時解析預期?

[英]How can I parse pexpect in real time?

我正在考慮在我們的一個部署腳本包裝器中使用pexpect (如果沒有其他更好的選擇,則完全開放給其他選擇),但我需要一種實時讀取輸出的方法,不僅是一次已經擊中了EOF 由於這是一個部署包,適用於所有環境,因此我們需要盡快發現問題(如果情況真的很糟,有可能擊中緊急出口)。

我可以使用這種東西嗎? 理想情況下,我想利用我們現有的記錄器。

def SetupLogging():
    # the logger
    # set to DEBUG since the reports should already give
    # any information we're looking for at a glance
    global log 
    log = logging.getLogger('ansiwrap')
    log.setLevel(logging.DEBUG)

    # create file handler which logs everything
    fh = logging.FileHandler('ansiwrap.debug', mode='w')
    fh.setLevel(logging.DEBUG)

    # create console handler with a higher log level
    ch = logging.StreamHandler()
    ch.setLevel(logging.INFO)

    # create formatter and add it to the handlers
    formatter = logging.Formatter('[%(asctime)s] | %(name)s - %(levelname)s - %(message)s')
    ch.setFormatter(formatter)  
    fh.setFormatter(formatter)

    # add the handlers to logger
    log.addHandler(ch)
    log.addHandler(fh)

為了完整起見,這是一個示例實現,但是對我來說似乎很笨拙:

child = pexpect.spawn(cmd)
while True:
    try:
        child.expect('\n')
        print(child.before)
    except pexpect.EOF:
        break 

子進程終止時,將命中EOF 要獲得正在發送的命令和收到的答復的實時輸出,可以將輸出記錄到stdout或文件中。

Pexpect的Spawn類具有logfile_read屬性,該屬性將子進程的輸出寫入指定的文件。 如下所示修改代碼即可完成這項工作。 我正在使用sys.stdout它將所有內容打印到控制台。 您可以打開一個文件並使用它

child = pexpect.spawn(cmd)
child.logfile_read = sys.stdout
while True:
    try:
        child.expect('\n')
        print(child.after)
    except pexpect.EOF:
        break 

仍然需要while塊的原因是因為每次寫入后都會刷新文檔日志文件。 由於不存在寫操作,因此期望調用將導致刷新文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM