整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          你一定不知道IDE里的Tomcat是怎么工作的

          注于Java領(lǐng)域優(yōu)質(zhì)技術(shù)號(hào),歡迎關(guān)注

          作者:Tomcat那些事兒

          如果正在閱讀本文的你是一名開發(fā)者,那么一定聽說(shuō)過(guò)EclipseIntellij IDEA這兩款可以稱之為神器的集成開發(fā)環(huán)境(IDE)。

          Eclipse以其代碼開源、插件眾多、擴(kuò)展方便等特點(diǎn),可以通過(guò)配置支持多種開發(fā)語(yǔ)言,用戶眾多。

          Intellij IDEA則是分為社區(qū)版和專業(yè)版。由于是商業(yè)公司在維護(hù)和更新,因此專業(yè)版有更豐富的功能,使用起來(lái)更便捷,但如果只使用社區(qū)版,則一大塊功能不能使用。

          當(dāng)然,我們今天要討論的不是兩個(gè)IDE孰優(yōu)孰劣,而是簡(jiǎn)要分析下Tomcat在這兩個(gè)使用量巨大的IDE中是如何工作的。


          1. Eclipse
          2. 首先來(lái)看下Eclipse,通過(guò)配置將本地已經(jīng)下載好的Tomcat添加到Server中。之后,在部署Web應(yīng)用的時(shí)候,就可以選擇已經(jīng)配置好的Tomcat。此時(shí),通過(guò)啟動(dòng)的Log,我們來(lái)看下其背后的原理。

          仔細(xì)看上面的藍(lán)框內(nèi),是一個(gè)類似tomcat的webapps這個(gè)應(yīng)用部署目錄的文件路徑,而且命令也是wtp.deploy。而wtp也是Eclipse的一個(gè)插件。我們?cè)夙樦@個(gè)路徑,在本地打開看下。

          這個(gè)是上層目錄,我們看到基本上除了Tomcat的bin目錄和lib目錄,剩下的差不多都在了。

          其中conf下的文件有這些

          可以看出和Tomcat的配置文件一個(gè)樣子。

          再用上一篇文章里提到的jps命令查看下具體執(zhí)行時(shí)的參數(shù),就基本理解了

          上面這張圖中,-D后面是JVM啟動(dòng)時(shí)傳遞的參數(shù),其中catalina.base,是代表Tomcat具體執(zhí)行時(shí),所有這些配置文件一類的資源具體查找的路徑,所有這些配置,在Tomcat啟動(dòng)后,都會(huì)被解析得到,所以這些獨(dú)立位置的配置文件才能生效。那如果要在一個(gè)IDE里跑多個(gè)Tomcat該怎么辦呢?

          有了上面的分析你一定會(huì)說(shuō),so easy.只需要指定不同的catalina.base,在其對(duì)應(yīng)的路徑下配置不同的文化的已 可以了。

          對(duì),影響一個(gè)操作系統(tǒng)中是否可以同時(shí)存在多個(gè)Tomcat,或者引申開來(lái),即多個(gè)應(yīng)用程序,無(wú)非是說(shuō)端口這一類的資源沒有被占用即可。

          而Tomcat,在本公眾號(hào)第三篇文章分析具體內(nèi)部組件時(shí)看過(guò),server.xml中可以配置Http通道,AJP通道這兩個(gè)是涉及到端口的,只要端口號(hào)使用不同的即可。

          另外一個(gè)經(jīng)常被忽略的是,Server下標(biāo)簽下的port,默認(rèn)是8005,這個(gè)也是會(huì)沖突的。需要注意下。


          有了上面的分析,我們可以大致理清頭緒了。在Eclipse里,Tomcat的執(zhí)行是通過(guò)指定不同的catalina.base來(lái)實(shí)現(xiàn)自定義不同的通道端口的配置,應(yīng)用文件部署目錄等,從而可以在IDE內(nèi)方便的使用之。

          1. Intellij IDEA
          2. 下面再來(lái)看下Intellij IDEA。在啟動(dòng)Tomcat時(shí),Log一開始就能看到類似于下面的內(nèi)容:

          注意藍(lán)框中對(duì)應(yīng)的內(nèi)容,和在上面分析Catalina.base基本一致。為了嚴(yán)謹(jǐn),還是要看一眼這個(gè)目錄內(nèi)對(duì)應(yīng)的內(nèi)容

          可以看出,實(shí)現(xiàn)思路和上面的分析基本一致,我們不再多談。

          但這里和Eclipse的插件實(shí)現(xiàn)的區(qū)別是,這里并沒有指定wtp.deploy這個(gè)類似的屬性,所以在上圖的webapps目錄內(nèi)并沒有我們要運(yùn)行的應(yīng)用的內(nèi)容。那這個(gè)時(shí)候,IDEA內(nèi)部是怎么實(shí)現(xiàn)應(yīng)用的部署的呢?



          在IDEA里,向tomcat部署一個(gè)應(yīng)用,啟動(dòng)時(shí),其實(shí)并不會(huì)在本地的tomcat中找到該應(yīng)用的目錄,或者實(shí)際運(yùn)行的目錄下有該應(yīng)用。仔細(xì)觀察發(fā)現(xiàn),IDEA是通過(guò)Tomcat的MBean,動(dòng)態(tài)的向tomcat增加了一個(gè)Context,即一個(gè)應(yīng)用。這****樣直接指定了應(yīng)用的路徑,訪問(wèn)路徑等

          例如下面的調(diào)用鏈:

          TCP Connection(2)-127.0.0.1@1379 daemon, prio=5, in group 'RMI Runtime', status: 'RUNNING'at org.springframework.web.context.ContextLoaderListener.<init>(ContextLoaderListener.java:98)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1585)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413)at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)at java.lang.Thread.run(Thread.java:745)

          同時(shí)還能觀察到這樣的調(diào)用鏈,因?yàn)橹挥衪omcat啟動(dòng)之后,它的MBeanServer才能夠被訪問(wèn)。所以如下是啟動(dòng)一個(gè)空tomcat。

          main@1, prio=5, in group 'main', status: 'RUNNING'at java.net.DualStackPlainSocketImpl.accept0(DualStackPlainSocketImpl.java:-1)atjava.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)atjava.net.ServerSocket.implAccept(ServerSocket.java:545)atjava.net.ServerSocket.accept(ServerSocket.java:513)atorg.apache.catalina.core.StandardServer.await(StandardServer.java:446)

          at java.lang.reflect.Method.invoke(Method.java:483)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

          通過(guò)上面簡(jiǎn)單的分析,IDE中Tomcat的具體執(zhí)行原理,已經(jīng)明了。

          clipse 是一個(gè)免費(fèi)、開放源代碼,基于Java的 集成開發(fā)環(huán)境。它以一切皆插件的設(shè)計(jì)思想,讓其核心很小。

          如果要支持諸如Java、C、C++、PHP、 Android、Python等編程語(yǔ)言的開發(fā),安裝其對(duì)應(yīng)的插件即可,如開發(fā)Python,安裝PyDev插件即可。

          更美的是,Java是跨平臺(tái)的,Eclipse也是。

          3.1 在Windows下安裝

          為了節(jié)約來(lái)回”跑”的時(shí)間,咱一次性把要安裝的相關(guān)文件都下載下來(lái)。下載之前請(qǐng)自行確認(rèn)個(gè)人計(jì)算機(jī)是32還是64位的。

          (1) 下載安裝包

          到JDK官網(wǎng)https://java.sun.com下載: jdk-8u201-windows-x64.exe安裝文件;

          到Eclipse官網(wǎng)https://www.eclipse.org下載eclipse-jee-2019-03-R-win32-x86_64.zip壓縮

          包;

          到https://sourceforge.net/projects/pydev下載PyDev插件的壓縮包: PyDev 7.2.0.zip。

          下載快慢,全憑網(wǎng)速,哪個(gè)先裝,我偏不告訴你:Eclipse的運(yùn)行,離不開JDK的支持,就從安裝JDK開始。

          (2) 安裝JDK

          雙擊打開安裝文件后,沒什么好說(shuō),好看的,直接【下一步】便可。

          如果想更改安裝路徑,就點(diǎn)【更改】按鈕,否則就采用默認(rèn)的安裝路徑就好了,一直【下一步】到底。

          安裝完成后,可以打開命令行窗口,輸入:java –version,驗(yàn)證一下是否正確,妥妥的。

          (3) 安裝Eclipse

          有了JDK的大力支持后,咱就開始安裝Eclipse吧。因?yàn)橄螺d的是壓縮包,找個(gè)你喜歡的文件夾(如D:\DevHome),解壓縮到里面就算安裝好了,簡(jiǎn)單,有趣。

          (4) 安裝PyDev

          安裝好了Eclipse,Python插件PyDev的也是隨之而來(lái)。去,解壓縮PyDev 7.2.0.zip文件,并解壓縮后的features、plugins文件夾,拷貝到eclipse下的dropins文件夾里面。

          (5) 配置環(huán)境

          就那樣,就這樣,不知不覺,就安裝好了JDK、Eclipse和PyDev了,會(huì)解壓縮就是好。接著咱來(lái)配置Python的開發(fā)環(huán)境,到eclipse文件夾里面,點(diǎn)擊eclipse.exe,啟動(dòng)Eclipse。選擇工程目錄,設(shè)置為默認(rèn),這樣以后就不用再選擇了。

          進(jìn)到歡迎界面后,勾選掉:Always show Welcome at start up,關(guān)閉Welcome窗口。

          在窗口的右上角,有一個(gè)開發(fā)環(huán)境切換圖標(biāo),點(diǎn)它。在彈出切換窗口中,選擇PyDev這一項(xiàng),【Open】之后,便是Python的天下。

          光有華麗的IDE窗口還不夠,還需點(diǎn)擊菜單欄Windows ->Preferences,配置Python的運(yùn)行環(huán)境。在彈出的對(duì)話框中,目的定位到:PyDev-> Interpreter->Python Interpreter。

          大膽地點(diǎn)下【Choose from list】,在彈出的內(nèi)容中,全選Python的所有開發(fā)包,【OK】。

          在返回的窗口中,記得選擇【Apply and Close】進(jìn)行確定并保存相關(guān)設(shè)置。到這一步,安裝和配置環(huán)境就算全部完成了。

          (6) 運(yùn)行Demo

          新建工程,點(diǎn)擊Eclipse菜單欄【File】-【New】-【Pydev Project】。

          輸入名稱:OurHome,點(diǎn)擊【Finish】。

          新建文件, testimony.py (testimony的中文意思:宣言)

          輸入: print(‘Hello World!’),并保存(悄悄告訴你,保存的快捷鍵是:ctrl+s)。

          點(diǎn)擊文件名或在編輯內(nèi)容里右鍵,選擇【Run As】-【Python Run】

          學(xué)編程,如果連第1行代碼,都沒搞明白的話,那你就要,搞到明白為止。print()方法用于打印輸出,是最常用的一個(gè)函數(shù)。按下ctrl鍵,鼠標(biāo)點(diǎn)擊,可查看print方法的參數(shù),解釋我為你寫好了。

          print函數(shù)語(yǔ)法:print(self, *args, sep=' ', end='\n', file=None)

          self – 類的實(shí)例,后期說(shuō)面向?qū)ο髸r(shí)會(huì)介紹到。

          args – 多項(xiàng)輸出數(shù)據(jù)項(xiàng),用,分隔。

          sep – 數(shù)據(jù)項(xiàng)之間的間隔,默認(rèn)是空格。

          end – 設(shè)定結(jié)尾。默認(rèn)是換行符 \n。

          file – 指定輸出數(shù)據(jù)到文件或屏幕(默認(rèn))中。

          我們寫3個(gè)例子深入了解一下。

          第1個(gè)例子,了解args、sep和end參數(shù)的用法。

          print("關(guān)注老陳", "一起學(xué)編程", sep=",", end=",")
          print("還可以,討論如何找女朋友。")

          輸出結(jié)果

          關(guān)注老陳,一起學(xué)編程,還可以,討論如何找女朋友。

          第2個(gè)例子,將內(nèi)容輸出到文件里面

          f = open('a.txt', 'w')
          print('關(guān)注老陳,一起學(xué)編程', file=f)
          f.close()

          輸出結(jié)果,一個(gè)a.txt文件,打開內(nèi)容是

          關(guān)注老陳,一起學(xué)編程

          第3個(gè)例子,輸出一個(gè)安裝進(jìn)度條,很有意思的一個(gè)例子。

          import time
          print("安裝中", end="")
          for i in range(20):
              print("??", end='')
              time.sleep(0.2)
          print("\n恭喜你,安裝完成")

          輸出結(jié)果

          安裝中????????????????????????????????????????
          恭喜你,安裝完成

          好了,print函數(shù)說(shuō)完了,想學(xué)好編程的你,記得多動(dòng)手實(shí)戰(zhàn)。

          一個(gè)當(dāng)了10年技術(shù)總監(jiān)的老家伙,分享多年的編程經(jīng)驗(yàn)。想學(xué)編程的朋友,可關(guān)注:老陳說(shuō)編程。我將分享Python,前端(小程序)和App方面的編程知識(shí)。關(guān)注我,沒錯(cuò)的。

          3.2 在macOS下安裝

          為了節(jié)約來(lái)回”跑”的時(shí)間,咱一次性把要安裝的相關(guān)文件都下載下來(lái)。

          到JDK官網(wǎng)https://java.sun.com下載: jdk-8u202-macosx-x64.dmg安裝包;

          到Eclipse官網(wǎng)https://www.eclipse.org下載: eclipse-jee-2019-03-R-macosx-cocoa-x86_64.dmg安裝包;

          到https://sourceforge.net/projects/pydev下載PyDev插件的壓縮包: PyDev 7.2.0.zip。

          眾所周知,Eclipse的運(yùn)行,離不開JDK的支持,我們就從安裝JDK開始。

          (1) 安裝JDK

          雙擊,拖動(dòng),一直【繼續(xù)】到底。

          稍等一會(huì)兒,就到安裝成功提示窗口了。

          (2) 安裝Eclipse

          雙擊Eclipse安裝包,雙擊【Applications】打開【應(yīng)用程序】目錄,并把Eclipse拖過(guò)去。

          進(jìn)到【應(yīng)用程序】大本營(yíng)。

          右鍵Eclipse圖標(biāo),【顯示包內(nèi)容】-【Contents】-【Eclipse】。

          (3) 安裝PyDev

          解壓縮PyDev安裝包,并把【features】、【plugins】里的內(nèi)容分別復(fù)制,粘貼到Eclipse下的【features】、【plugins】里。

          (4) 配置運(yùn)行環(huán)境

          打開eclipse,進(jìn)到開發(fā)窗口。點(diǎn)擊Eclipse右上角切換圖標(biāo),切換為PyDev。點(diǎn)擊Eclipse頂部菜單欄【W(wǎng)indow】-【Show View】-【Console】顯示控制臺(tái)。

          點(diǎn)擊頂部菜單欄【Eclipse】-【Preferences】,打開pyDev-> Interpreter->Python Interpreter

          點(diǎn)擊【Choose from list】按鈕,選擇Python版本。

          按下【Apply and Close】,返回主窗口,運(yùn)行環(huán)境就配置好了。

          (5) 來(lái)個(gè)demo

          新建工程(【File】-【New】-【Pydev Project】),輸入:OurHome,點(diǎn)擊【Finish】。

          新建文件testimony.py(文件名隨便你取,喜歡就好), 輸入: print(‘Hello World!’)并保存。

          點(diǎn)擊文件名或在編輯內(nèi)容里右鍵,選擇【Run As】-【Python Run】。

          Ladies and gentlemen,糟老頭們,激動(dòng)人心的一刻出現(xiàn)了,確認(rèn)無(wú)誤,輸出結(jié)果就是:Hello World!

          學(xué)編程,如果連第1行代碼,都沒搞明白的話,那你就要,搞到明白為止。print()方法用于打印輸出,是最常用的一個(gè)函數(shù)。按下ctrl鍵,鼠標(biāo)點(diǎn)擊,可查看print方法的參數(shù),解釋我為你寫好了。

          print函數(shù)語(yǔ)法:print(self, *args, sep=' ', end='\n', file=None)

          self – 類的實(shí)例,后期說(shuō)面向?qū)ο髸r(shí)會(huì)介紹到。

          args – 多項(xiàng)輸出數(shù)據(jù)項(xiàng),用,分隔。

          sep – 數(shù)據(jù)項(xiàng)之間的間隔,默認(rèn)是空格。

          end – 設(shè)定結(jié)尾。默認(rèn)是換行符 \n。

          file – 指定輸出數(shù)據(jù)到文件或屏幕(默認(rèn))中。

          我們寫3個(gè)例子深入了解一下。

          第1個(gè)例子,了解args、sep和end參數(shù)的用法。

          print("關(guān)注老陳", "一起學(xué)編程", sep=",", end=",")
          print("還可以,討論如何找女朋友。")

          輸出結(jié)果

          關(guān)注老陳,一起學(xué)編程,還可以,討論如何找女朋友。

          第2個(gè)例子,將內(nèi)容輸出到文件里面

          f = open('a.txt', 'w')
          print('關(guān)注老陳,一起學(xué)編程', file=f)
          f.close()

          輸出結(jié)果,一個(gè)a.txt文件,打開內(nèi)容是

          關(guān)注老陳,一起學(xué)編程

          第3個(gè)例子,輸出一個(gè)安裝進(jìn)度條,很有意思的一個(gè)例子。

          import time
          print("安裝中", end="")
          for i in range(20):
              print("??", end='')
              time.sleep(0.2)
          print("\n恭喜你,安裝完成")

          輸出結(jié)果

          安裝中????????????????????????????????????????
          恭喜你,安裝完成

          好了,print函數(shù)說(shuō)完了,想學(xué)好編程的你,記得多動(dòng)手實(shí)戰(zhàn)。

          一個(gè)當(dāng)了10年技術(shù)總監(jiān)的老家伙,分享多年的編程經(jīng)驗(yàn)。想學(xué)編程的朋友,可關(guān)注:老陳說(shuō)編程。我將分享Python,前端(小程序)和App方面的編程知識(shí)。關(guān)注我,沒錯(cuò)的。

          3.3 在Ubuntu下安裝

          在Ubuntu下安裝JDK,不用下載安裝包,用命令就可以;

          到Eclipse官網(wǎng)https://www.eclipse.org下載: eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz安裝包;

          至于PyDev(http://pydev.org/updates)插件,通過(guò)在線安裝就可以了。

          (1) 安裝JDK

          打開【終端】,輸入以下幾個(gè)命令就開始了。

          #添加JDK下載資源,按回車確認(rèn)

          sudo add-apt-repository ppa:webupd8team/java

          #更新資源列表

          sudo apt-get update

          #安裝JDK8

          sudo apt-get install oracle-java8-installer

          安裝完成后,可以確認(rèn)一下JDK8的相關(guān)配置信息(如默認(rèn)版本)。打開【終端】,輸入:java –vesion。倘若顯示的是其他版本(如OpenJDK),可以運(yùn)行:sudo update-java-alternatives -s java-8-oracle 命令, 將JDK8設(shè)置為默認(rèn)項(xiàng)。

          (2) 安裝Eclipse

          安裝完JDK后,下載完成后,把文件移到主目錄下,雙擊打開并拖動(dòng)出去,系統(tǒng)自帶的解壓縮軟件會(huì)開始進(jìn)行解壓縮。

          稍等片刻,解壓縮就好了。進(jìn)到Eclipse文件夾里,雙擊eclipse圖標(biāo)啟動(dòng)軟件。

          更改工程存放位置,并勾選為默認(rèn)(下次啟動(dòng)時(shí),就不用再選擇了),【Launch】。

          (3) 安裝PyDev

          點(diǎn)擊菜單欄【Help】-【Install New Software…】進(jìn)入插件安裝窗口。

          在這里可以進(jìn)行插件添加和管理,點(diǎn)擊【Add..】按鈕,進(jìn)入添加窗口。

          輸入插件Name(名稱):PyDev和Location(地址):http://pydev.org/updates,點(diǎn)擊【Add】開始加載插件內(nèi)容并自動(dòng)返回。

          勾選第一項(xiàng)PyDev,【Next】再【Next】,同意協(xié)議并【Finish】。安裝需要一段時(shí)間,請(qǐng)耐心等待,等安裝完成了,進(jìn)行Eclipse重啟。

          (4) 配置環(huán)境

          再次進(jìn)入Eclipse,濤聲依舊,窗口還是之前的那般模樣。點(diǎn)擊開發(fā)環(huán)境切換圖標(biāo),切換到PyDev下。

          環(huán)境準(zhǔn)備就緒,咱來(lái)配置運(yùn)行環(huán)境。點(diǎn)擊菜單欄【W(wǎng)indow】-【Preferences】,目標(biāo)定位到PyDev-Interpreters-Python Interpreter,點(diǎn)擊【Choose from list】。

          指定Python解析器位置,選擇最新版的python3.7,點(diǎn)擊【OK】,會(huì)彈出一個(gè)新的窗口,選擇開發(fā)庫(kù)。

          選上所有開發(fā)庫(kù),點(diǎn)【OK】按鈕后返回到【Preferences】窗口,點(diǎn)【Apply and Close】,運(yùn)行環(huán)境到這配置好了。

          (5) 運(yùn)行Demo

          既然有了運(yùn)行環(huán)境了,咱就編個(gè)程序試試。點(diǎn)擊菜單欄【New】-【PyDev Project】新建一個(gè)工程HelloPython,其他的有默認(rèn)值就可以了,【Finish】。

          右鍵HelloPython工程,【New】-【File】,新建一個(gè)文件hello.py,輸入內(nèi)容:print(“編程的世界很奇妙。”)并回車。

          在內(nèi)容編輯器中或選中hello.py文件后,鼠標(biāo)右鍵,在彈出的菜單中選擇【Run As】-【Python Run】進(jìn)行程序運(yùn)行。

          運(yùn)行結(jié)果:”編程的世界很奇妙。”就在下面,如果看不清的話,你該起身運(yùn)動(dòng)了。生命在于運(yùn)動(dòng),程序在于手動(dòng)。

          學(xué)編程,如果連第1行代碼,都沒搞明白的話,那你就要,搞到明白為止。print()方法用于打印輸出,是最常用的一個(gè)函數(shù)。按下ctrl鍵,鼠標(biāo)點(diǎn)擊,可查看print方法的參數(shù),解釋我為你寫好了。

          print函數(shù)語(yǔ)法:print(self, *args, sep=' ', end='\n', file=None)

          self – 類的實(shí)例,后期說(shuō)面向?qū)ο髸r(shí)會(huì)介紹到。

          args – 多項(xiàng)輸出數(shù)據(jù)項(xiàng),用,分隔。

          sep – 數(shù)據(jù)項(xiàng)之間的間隔,默認(rèn)是空格。

          end – 設(shè)定結(jié)尾。默認(rèn)是換行符 \n。

          file – 指定輸出數(shù)據(jù)到文件或屏幕(默認(rèn))中。

          我們寫3個(gè)例子深入了解一下。

          第1個(gè)例子,了解args、sep和end參數(shù)的用法。

          print("關(guān)注老陳", "一起學(xué)編程", sep=",", end=",")
          print("還可以,討論如何找女朋友。")

          輸出結(jié)果

          關(guān)注老陳,一起學(xué)編程,還可以,討論如何找女朋友。

          第2個(gè)例子,將內(nèi)容輸出到文件里面

          f = open('a.txt', 'w')
          print('關(guān)注老陳,一起學(xué)編程', file=f)
          f.close()

          輸出結(jié)果,一個(gè)a.txt文件,打開內(nèi)容是

          關(guān)注老陳,一起學(xué)編程

          第3個(gè)例子,輸出一個(gè)安裝進(jìn)度條,很有意思的一個(gè)例子。

          import time
          print("安裝中", end="")
          for i in range(20):
              print("??", end='')
              time.sleep(0.2)
          print("\n恭喜你,安裝完成")

          輸出結(jié)果

          安裝中????????????????????????????????????????
          恭喜你,安裝完成

          好了,print函數(shù)說(shuō)完了,想學(xué)好編程的你,記得多動(dòng)手實(shí)戰(zhàn)。

          一個(gè)當(dāng)了10年技術(shù)總監(jiān)的老家伙,分享多年的編程經(jīng)驗(yàn)。想學(xué)編程的朋友,可關(guān)注:老陳說(shuō)編程。我將分享Python,前端(小程序)和App方面的編程知識(shí)。關(guān)注我,沒錯(cuò)的。


          #python##Python編程從入門到實(shí)踐##程序員#

          為Eclipse IDE 代碼自動(dòng)補(bǔ)全插件,CodeMix解鎖了VS Code的各種技術(shù)以 及為Code OSS構(gòu)建的附加擴(kuò)展,支持各種語(yǔ)言。用戶可以直接從Eclipse訪問(wèn)VS Code本身的各種技術(shù)以及為Code OSS構(gòu)建的附加擴(kuò)展,能夠使用Python,PHP 和TypeScript等語(yǔ)言的擴(kuò)展和Vue,React和Angular等框架,與基于Eclipse IDE和 工具(如MyEclipse,Spring Tools Suite和JBoss Tools)兼容,因此用戶可以繼續(xù) 在習(xí)慣的環(huán)境中工作。

          全新的UI設(shè)置

          現(xiàn)在可通過(guò)過(guò)濾器組織到參數(shù)頁(yè)面和關(guān)鍵字導(dǎo)航中,導(dǎo)航設(shè)置會(huì)更自然,查找需要的東西將更容易!

          互動(dòng)教程

          odeMix視圖具有全新的外觀,可幫助您探索教程并開始使用一些流行的技術(shù),如Vue,React,Angular和Node。

          更新引擎和擴(kuò)展

          引擎現(xiàn)在與VS Code 1.32.1兼容,并且擴(kuò)展已更新到最新版本,引入大量新功能。

          改進(jìn)Vue.js編碼

          來(lái)自Vetur擴(kuò)展的大量修復(fù)使Vue開發(fā)更上一層樓,從模板插值完成到對(duì)格式化的更多控制。

          優(yōu)化引擎啟動(dòng)

          您可能會(huì)注意到左下方的新引擎狀態(tài) - 為了快速啟動(dòng)引擎,我們還有另一種狀態(tài)可以讓語(yǔ)言服務(wù)在升級(jí)擴(kuò)展等操作之前啟動(dòng)和運(yùn)行。

          CodeMining默認(rèn)為OFF

          經(jīng)過(guò)廣泛分析,我們確定CodeMining對(duì)性能產(chǎn)生了負(fù)面影響。 它現(xiàn)在默認(rèn)關(guān)閉;但是,如果您選擇重新打開,此版本包括性能修復(fù)程序。

          導(dǎo)入和導(dǎo)出設(shè)置

          想與團(tuán)隊(duì)成員分享設(shè)置和擴(kuò)展程序嗎? CodeMix現(xiàn)在可以輕松導(dǎo)出和導(dǎo)入。

          編輯修復(fù)

          編碼的各種修復(fù)已經(jīng)落實(shí),包括更好的文件編碼支持,避免Save All改變編輯器焦點(diǎn),以及使用Go to Definition定位修復(fù)。

          啟動(dòng)修復(fù)程序

          修復(fù)了Angular,Python和Chrome Debug啟動(dòng)的關(guān)鍵修復(fù)以及向?qū)У母鞣N改進(jìn)。

          兼容性修復(fù)

          CodeMix現(xiàn)在對(duì)Java 12以及Google的Guava插件的最新版本很友好。

          CodeMix獨(dú)家中文視頻:Vue.js開發(fā) 5分鐘快速入門,點(diǎn)擊查看更多立即觀看>>


          主站蜘蛛池模板: 国产91久久精品一区二区| 视频一区在线免费观看| 波多野结衣在线观看一区| 国产一区二区在线观看app| 午夜天堂一区人妻| 一区二区亚洲精品精华液| 色欲AV无码一区二区三区| 偷拍激情视频一区二区三区| 国产综合无码一区二区色蜜蜜| 精品人妻少妇一区二区| 亚洲AV无码一区二区三区性色| 久久久久人妻一区精品果冻| 精品无码一区二区三区电影| 91久久精一区二区三区大全| 国产一区二区草草影院| 国产福利精品一区二区| 一区二区三区高清视频在线观看| 亚洲av永久无码一区二区三区| 性无码免费一区二区三区在线| 精品人妻少妇一区二区三区不卡| 免费精品一区二区三区第35| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲制服中文字幕第一区| 国产AⅤ精品一区二区三区久久| 国产乱码伦精品一区二区三区麻豆 | 亚洲国产福利精品一区二区| 国产亚洲一区二区在线观看| 国产主播福利精品一区二区| 久久无码人妻一区二区三区| 日韩A无码AV一区二区三区| 日韩视频一区二区在线观看| 波多野结衣av高清一区二区三区| 亚洲.国产.欧美一区二区三区| 亚洲一区免费视频| 久久久国产精品亚洲一区| 99久久精品国产一区二区成人 | 亚洲视频一区网站| 国产99久久精品一区二区| 无码丰满熟妇浪潮一区二区AV| 亚洲综合在线一区二区三区| 大帝AV在线一区二区三区|