日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 處芯積律

EDA工具的log(日志)捕獲,是一個(gè)經(jīng)常會(huì)用到的功能,有助于用戶查看long run job的狀態(tài)和錯(cuò)誤捕獲,這里一般是利用了linux下的重定向(redirect)或者輸出捕獲(tee),這里通過對(duì)linux這兩個(gè)命令的學(xué)習(xí)梳理,用戶可以根據(jù)自身需要,優(yōu)化EDA工具的LOG捕獲工作。閑言少敘,ICer GO!

在Linux下,對(duì)于IO管理有三個(gè)標(biāo)記,分別如下:

0:stdin 1:stdout 2:stderr 

PTS的理解

可以看到,無論是0/1/2最后都會(huì)指向/dev/pts/166這個(gè)終端號(hào)(166),可以理解,這個(gè)166終端既可以接受stdin,也可以打印stdout(如上所述)和stderr,用戶在/dev/fd目錄下,可以看到類似下面的結(jié)構(gòu):
在這里插入圖片描述
PTS是linux下的虛擬終端(pty)的一種實(shí)現(xiàn)方法。這里的/dev/pts/166可以簡(jiǎn)單的理解為當(dāng)前用戶的具象化的虛擬終端tty。
這里表達(dá)的意思是:當(dāng)前的偽終端的所有打印都會(huì)通過/dev/pts/166這個(gè)“設(shè)備”完成,這個(gè)“設(shè)備”既可以接受stdin,也可以輸出stdout和stderr。

stdin(0):

在linux下,所有的輸入對(duì)被歸為stdin,可以是鍵盤輸入,也可以是文件輸入,鍵盤輸入在此不贅述。
文件輸入需要借助于輸入重定向<實(shí)現(xiàn)
在這里插入圖片描述
抑或利用0(stdin)結(jié)合輸入重定向?qū)崿F(xiàn):
在這里插入圖片描述

stdout(1):

輸出重定向到指定設(shè)備

linux下的重定向符>,可以指向固定設(shè)備,譬如這里重定向到/dev/tty,就會(huì)帶來一種類似屏幕打印的效果。
在這里插入圖片描述
也可以指向linux的"null設(shè)備"。
在這里插入圖片描述

輸出重定向到指定文件

相較于重定向到設(shè)備,linux下的輸出重定向符更多的是指向指定文件,譬如下例:
在這里插入圖片描述
在使用重定向stdout命令的時(shí)候,如果命令的返回只有stdout,那么這個(gè)命令不會(huì)有任何返回信息,所有的信息都被重定向到指定文件中去了。
由于默認(rèn)的>的行為是對(duì)stdout的重定向,這里就近似等同于1>,所以,一種對(duì)stdout,更為完整的重定向?qū)懛ㄈ缦滤荆?/span>

在這里插入圖片描述

stderr(2):

日常的使用中,用戶不可能保證每一個(gè)命令都可以正常執(zhí)行,在這種情況下,命令的返回信息可能就會(huì)參雜非stdout的信息,linux將這一類歸為stderr。譬如下例:
在這里插入圖片描述
這里用戶嘗試ls 一個(gè)不存在的文件f4.txt。可以看到,這個(gè)時(shí)候在使用重定向輸出命令的時(shí)候,終端上有了一個(gè)錯(cuò)誤的信息輸出,來表述f4.txt這個(gè)文件是不存在的。
如果這個(gè)時(shí)候查看輸出重定向的消息,f1234.log??梢钥吹剑@里只有正常的文件信息,所以,正常的重定向命令,確實(shí)只是捕獲了stdout,如果用戶的想實(shí)現(xiàn)stderr的重定向,需要使用下面的方法:
在這里插入圖片描述
這個(gè)時(shí)候需要借用2>來描述對(duì)于stderr信息的處理,通過上述例子,屏幕上并沒有任何信息輸出,這里的stdout和stderr分別被重定向到f123.log和f4.log文件里了。

類似的用戶也可以只針對(duì)stderr進(jìn)行重定向,譬如:
在這里插入圖片描述
這個(gè)時(shí)候,屏幕上會(huì)把正常的stdout打印出來,stderrr信息被保留到了f4.log。
由于默認(rèn)的>的行為是對(duì)stdout的重定向,這里就近似等同于1>,所以,一種對(duì)stdout/stderr,更為完整的重定向?qū)懛ㄈ缦滤荆?/span>
在這里插入圖片描述

stdout和stderr重定向同一文件

有些情況下,用戶不想將stdout和stderr分開,這樣的好處是可以把命令執(zhí)行的所有信息都捕捉下來(stdout+stderr),這個(gè)時(shí)候需要用到一個(gè)修飾符&,譬如下例:
在這里插入圖片描述
這里的重定向符號(hào)結(jié)合了修飾符,變成了&>,所有的stdout和stderr都會(huì)被重定向到f1234.log里邊了。
常言道條條大路通羅馬,linux就是古諺的忠實(shí)踐行者,通過命令后綴2>&1的方式,也可以實(shí)現(xiàn)上述功能,具體見下:
在這里插入圖片描述
這個(gè)方式是將stderr先重定向到stdout,然后在同一將stdout 重定向到f1234.log。
PS:對(duì)應(yīng)的也可以對(duì)stdout做重定向,有興趣的小伙伴可以試一下

重定向和屏幕捕獲(tee)異同

在日常的工作中,由于EDA工具的日志都會(huì)比較長(zhǎng),如果簡(jiǎn)單的使用重定向,那么命令行在EDA任務(wù)完成前,屏幕都不會(huì)有任何回顯,這個(gè)時(shí)候會(huì)給人一些EDA工具運(yùn)行出錯(cuò)的誤判,所以在日沖工作中,更多的工程師喜歡使用屏幕捕獲(tee)這個(gè)命令:EDA工具在打印信息到屏幕上的時(shí)候,同時(shí)也會(huì)將屏顯內(nèi)容捕獲到指定文件中:
譬如:
在這里插入圖片描述
但是tee一樣會(huì)有類似重定向的問題,就是對(duì)于stdout和stderr的分別對(duì)待,這個(gè)從tee的manual可以看到
在這里插入圖片描述
所以說tee只能捕獲屏幕上的stdout信息,而不能去捕獲stderr的信息,雖然stdout和stderr都會(huì)出現(xiàn)在屏幕上,譬如下例:
在這里插入圖片描述
但是對(duì)于EDA用戶,這個(gè)是不方便的,用戶總是期望捕獲命令的所有輸出。結(jié)合上述講解,也可以借助修飾符&讓tee完成這個(gè)任務(wù):
- 方法一:使用命令|&進(jìn)行捕獲,譬如下例:
在這里插入圖片描述
方法二:對(duì)stderr進(jìn)行重定向后處理后的,而后用tee對(duì)stdout進(jìn)行捕獲
在這里插入圖片描述

shell的異同

由于bash是linux默認(rèn)的shell,這里對(duì)stdin/stdout/stderr(0/1/2)支持的很好,所以上述命令都可以正常使用,但是對(duì)于csh/tcsh這類基于C的shell,確實(shí)不能直接使用0/1/2進(jìn)行處理的
在這里插入圖片描述

從上例可以看到,2這個(gè)在bash里邊標(biāo)記stderr的標(biāo)記字,在tcsh下是被當(dāng)作argument來處理的。但是tcsh的作者還是尊重原著的,使用修飾符&,就可以讓命令在bash/tcsh下實(shí)現(xiàn)兼容:
在這里插入圖片描述
所以,對(duì)于shell之間,唯一的區(qū)別就是tcsh下無法將stdout和stderr分別處理,只能做合并,或者只捕獲stdout。

EDA工具日志捕獲實(shí)踐

經(jīng)過上邊的描述,用戶對(duì)于linux下的重定向和tee有了全面的認(rèn)識(shí),對(duì)于大部分日常的EDA工具,用戶使用常規(guī)對(duì)stdout處理的命令就可以了,但是對(duì)于S家的StarRC工具,這個(gè)可能有一點(diǎn)需要特殊處理,
用戶嘗試對(duì)StarXtract 命令的輸出進(jìn)行常規(guī)輸出重定向,但是這個(gè)時(shí)候盡管使用了>,但是屏幕上依然有輸出
在這里插入圖片描述
這個(gè)時(shí)候,再看重定向的目標(biāo)文件,發(fā)現(xiàn)字節(jié)數(shù)竟然是0。
在這里插入圖片描述
所以可以判定,StarXtract 這個(gè)命令的輸出都被判定為stderr。
方法一:重定向捕獲:用戶需要使用2>重定向StarXtract 命令輸出:
在這里插入圖片描述
方法二:tee捕獲:用戶需要使用|&重定向StarXtract 命令輸出:

在這里插入圖片描述

【敲黑板劃重點(diǎn)】

重定向是linux基礎(chǔ)的IO操作方式,都可以輕松使用0/1/2(bash下)進(jìn)行控制,但是對(duì)于tee這個(gè)屏幕捕獲的命令,是針對(duì)stdout的捕獲,和重定向相比,用戶只能選擇把steout或者stdout和stderr統(tǒng)一捕獲到同一文件中,不能分開捕獲,這個(gè)也是符合tee的設(shè)計(jì)初衷的。
對(duì)于所有的EDA工具的屏幕輸出,對(duì)于常見的shell(bash/tcsh/csh)用戶可以一勞永逸的是用 “|&”的方式對(duì)stdout和stderr將屏幕輸出全部捕獲出來


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉