[英]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.