摘要:類似這樣執(zhí)行打印最終輸出的日志要想在命令行模式工作的時(shí)候,查看它的編譯進(jìn)度,霖哥一般會(huì)遠(yuǎn)程跑進(jìn)執(zhí)行編譯工作的機(jī)器,然后用命令,把它的日志實(shí)時(shí)輸出來嗯,這相當(dāng)?shù)牟豢茖W(xué)啊。我是霖哥,一個(gè)商學(xué)院畢業(yè)的程序員,一個(gè)游戲開發(fā)工程師。
如果你使用過Unity命令行模式(batchmode),來實(shí)現(xiàn)Unity自動(dòng)化編譯構(gòu)建,你肯定會(huì)踩過這樣的問題:
Unity的命令行模式,它只提供了一個(gè)-logfile參數(shù),用于把日志輸出到日志文件,但卻沒有提供實(shí)時(shí)的日志輸出功能。
《點(diǎn)擊參考官方命令行文檔》
在這種情況下,我們執(zhí)行Unity命令行程序,只知道了,Unity正在工作,但是,工作到什么進(jìn)度,從它的Unity命令行程序的進(jìn)程控制臺(tái)日志,是看不出來的。
對(duì)于我,折衷的辦法,會(huì)在自動(dòng)化的編譯腳本里,在Unity命令行執(zhí)行完畢以后,手動(dòng)的使用文件打印命令(cat),把日志給打印出來。類似這樣...
# 執(zhí)行Unity /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -projectPath ~/UnityProjectPath -nographics -executeMethod GameEditor.BuildApp -logFile ~/UnityProjectPath/__kellylog.txt # 打印最終輸出的日志 cat ~/UnityProjectPath/__kellylog.txt
要想在Unity命令行模式工作的時(shí)候,查看它的編譯進(jìn)度,霖哥一般會(huì)遠(yuǎn)程跑進(jìn)執(zhí)行編譯工作的機(jī)器,然后用tail -f命令,把它的日志實(shí)時(shí)輸出來...
tail -F ~/UnityProjectPath/__kellylog.txt
嗯,這相當(dāng)?shù)牟豢茖W(xué)啊。
當(dāng)類似的情況一而再再而三地出現(xiàn)的時(shí)候,你可曾回想起,那作為軟件開發(fā)人員的最初夢(mèng)想?——Don"t Repeat Yourself,消滅重復(fù)。
那有沒有更好的方法?可以實(shí)時(shí)地,在執(zhí)行Unity命令行后臺(tái)程序的同時(shí),進(jìn)行日志輸出?
Python多線程就像我們前面所說的:Unity命令行模式,日志輸出到文件中;同時(shí),我平時(shí)使用tail -f命令,進(jìn)行日志查看;
所以解決方法,很簡(jiǎn)單,遵循這個(gè)思路,做一個(gè)小腳本:
這個(gè)腳本,調(diào)用Unity命令行模式執(zhí)行,同時(shí),實(shí)現(xiàn)類似tail命令的功能,實(shí)時(shí)打印日志
腳本語言的選擇,想要輕便、支持多線程、跨平臺(tái),Python自然是最佳的選擇了。用Python的subprocess子進(jìn)程模塊,就能輕松實(shí)現(xiàn)這樣的功能。
首先,使用subprocess調(diào)用Unity進(jìn)程,并且實(shí)時(shí)輸出進(jìn)程控制臺(tái)標(biāo)準(zhǔn)輸出的日志。
# 執(zhí)行命令,子進(jìn)程,并把進(jìn)程控制臺(tái)日志,實(shí)時(shí)輸出 import subprocess cmd = """ /Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -projectPath ~/UnityProjectPath -nographics -executeMethod GameEditor.BuildApp -logFile ~/UnityProjectPath/__kellylog.txt """ process = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=project_path ) while True: out = process.stdout.read(1) if out == "" and process.poll() != None: break if out != "": sys.stdout.write("[Unity process console output]: " + out) sys.stdout.flush()
然后,發(fā)起一個(gè)線程,使用python-tail模塊,實(shí)時(shí)把日志文件,進(jìn)行抓取輸出。
import thread, tail def tail_thread(tail_file): t = tail.Tail(tail_file) t.register_callback(unity_log_tail) t.follow(s=1) thread.start_new_thread(tail_thread, ("~/UnityProjectPath/__kellylog.txt", ))
你看,其實(shí)很簡(jiǎn)單的腳本,動(dòng)動(dòng)腦、動(dòng)動(dòng)手,就能實(shí)現(xiàn)達(dá)到目的,就一個(gè)子進(jìn)程,加一個(gè)線程嘛。
源碼上面的只是不完整的一小段腳本技巧,完整的代碼可以直接使用,開源在GitHub:
unity_realtime_log | https://github.com/mr-kelly/unity_realtime_log
你可以跨平臺(tái)使用這個(gè)腳本,制定Unity的路徑(-unity),工程路徑(-project),和需要執(zhí)行的C#方法(-method)。
Windows:
unity_realtime_log.bat -unity C:UnityUnity.exe -project C:UnityProjectPath -method GameEditor.BuildMethod
Mac:
unity_realtime_log.sh -unity /Applications/Unity/Unity.app/Contents/MacOS/Unity -project ~/UnityProjectPath -method GameEditor.BuildMethod
或者直接執(zhí)行Python:
python unity_realtime_log.py -unity C:UnityUnity.exe -project C:UnityProjectPath -method GameEditor.BuildMethod
這樣用,就相當(dāng)于給Unity命令行程序,外掛上了實(shí)時(shí)日志輸出的功能啦。
以上,希望對(duì)你有幫助。
我是霖哥,一個(gè)商學(xué)院畢業(yè)的程序員,一個(gè)Unity3D游戲開發(fā)工程師。
如果覺得有用請(qǐng)點(diǎn)贊,轉(zhuǎn)載請(qǐng)注明出處。
如果在了解或?qū)W習(xí)編程的過程中有迷惘、或?qū)σ恍┥鷿目萍几拍畹牟唤?,評(píng)論里留下你的疑惑!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/38555.html
摘要:通常服務(wù)器上的日志都是輪轉(zhuǎn)日志。下面例子演示了如何同時(shí)顯示兩個(gè)日志文件。另一個(gè)類似的命令是,也能實(shí)時(shí)監(jiān)控多個(gè)文件。使用同時(shí)查看兩個(gè)日志的方法如下最后你可以用命令查看日志文件,然后按下也能實(shí)時(shí)查看日志內(nèi)容。在 Linux 下如何才能實(shí)時(shí)查看日志內(nèi)容呢?有很多工具可以幫助我們?cè)谖募掷m(xù)修改的同時(shí)輸出文件內(nèi)容,最常用的莫過于 tail 命令 了。1. tail Command – Monitor ...
摘要:工欲善其事必先利其器游戲環(huán)境對(duì)比發(fā)表算法在游戲上超過人類之后,游戲研究迅速成為了研究熱點(diǎn)。當(dāng)然這不是網(wǎng)絡(luò)游戲服務(wù)器架構(gòu)概述一架構(gòu)模型現(xiàn)代電子游戲,基本上都會(huì)使用一定的網(wǎng)絡(luò)功能。 每個(gè)程序員都需要知道一些游戲網(wǎng)絡(luò)知識(shí) 本文主要針對(duì)游戲的網(wǎng)絡(luò)設(shè)計(jì),在文章中目前主流的網(wǎng)絡(luò)游戲?qū)崿F(xiàn)方案都有講解。從Peer-to-Peer 幀同步,客戶端/服務(wù)器(c/s架構(gòu)),客戶端預(yù)測(cè)(Client-Side...
摘要:是什么鬼是一款阿里巴巴開源的線上診斷工具,功能非常強(qiáng)大,可以解決很多線上不方便解決的問題。診斷使用的是命令行交互模式,支持,操作系統(tǒng),命令還支持使用鍵對(duì)各種信息的自動(dòng)補(bǔ)全,診斷起來非常利索。顯示當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板,按即可退出。 Arthas是什么鬼? Arthas是一款阿里巴巴開源的 Java 線上診斷工具,功能非常強(qiáng)大,可以解決很多線上不方便解決的問題。 Arthas診斷使用的是...
閱讀 1938·2021-09-22 15:55
閱讀 3581·2021-09-07 10:26
閱讀 702·2019-08-30 15:54
閱讀 739·2019-08-29 16:34
閱讀 898·2019-08-26 14:04
閱讀 3334·2019-08-26 11:47
閱讀 2184·2019-08-26 11:33
閱讀 2345·2019-08-23 15:17