JavaWeb筆記 (4)—— 在Tomcat中運行Python文件


Tomcat中運行Python文件

分清兩個tomcat環境

在網上查了很久,大多用的是CGI。tomcat默認是關閉CGI的,要開啟CGI需要在conf/web.xml文件中將被注釋的幾行CGI配置解除注釋,

<servlet>
        <servlet-name>cgi</servlet-name>
        <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
         <init-param>
		 <param-name>debug</param-name>
		 <param-value>0</param-value>
		 </init-param>
        <init-param>
          <param-name>cgiPathPrefix</param-name>
          <param-value>WEB-INF/cgi</param-value>
        </init-param>
       <init-param>
          <param-name>executable</param-name>
          <param-value>C:\ProgramData\Anaconda3\python.exe</param-value>
        </init-param>
        <load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
        <servlet-name>cgi</servlet-name>
        <url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>

然后在conf/context.xml中在 標簽中加入privileged="true",也就是

<Context privileged="true"  reloadable="true">

    xxxx
</Context>

配置完畢后在eclipse中重啟tomcat,訪問http://localhost:8080/YOUR_PROJECT_NAME/cgi-bin/test.py,404.
但是在直接在cmd中啟動tomcat,並且在tomcat的webapps/myapp/WEB-INF/cgi/中放入test.py,
訪問http://localhost:8080/myapp/cgi-bin/test.py沒有報404,但是consle顯示python程序運行不成功
這說明在eclipse運行的tomcat和直接在tomcat根目錄下運行的tomcat是不共享conf/web.xml和conf/context.xml的配置的。
eclipse運行的tomcat上只能運行eclipse內的web項目。

python運行問題

tomcat根目錄下啟動服務,然后又遇到了問題。訪問http://localhost:8080/YOUR_PROJECT_NAME/cgi-bin/test.py步會404,但是也沒有任何輸出,在tomcat的consle中報錯:Failed to import the site module
也就是python程序剛初始化就失敗了。查了很久資料,檢查了很多遍環境變量,還是不行。第二天突然起來cgi還有一個參數沒有配置。
在上面的代碼中加入

 <init-param>  
          <param-name>passShellEnvironment</param-name>  
          <param-value>true</param-value>  
        </init-param>

這個參數的意思是:passShellEnvironment 是否應將 Tomcat 過程的 shell 環境變量(如果存在)傳入 CGI 腳本?默認為 false
將這個參數設為true后python程序就可以正常運行了,瀏覽器中顯示"hello,world"。

python程序中module調用問題

然后我把更復雜的一些python程序放到了cgi文件夾下,有些調用numpy包,matplotlib包,都沒問題,
只是沒有重寫程序將的話,輸出圖像只會在本機(也就是服務端)顯示彈窗顯示,輸出的數據在tomcat的consle中顯示,都沒有輸出到網頁。
這個問題不大,主要是后面我運行了一個調用tushare(一個能方便獲取詳細股票數據的包)的程序,tomcat報錯:

AttributeError: module 'tushare' has no attribute 'get_hist_data

難道是我包沒安裝?但是在IDE里運行很正常。以防萬一我還是pip install 了一次,還是不行。也不是什么有一個重名的tushare.py導致調用失敗。
我搞不懂了,我只能推測,可能是tushare的一些函數需要使用網絡接口,而在tomcat的環境下網絡接口是被嚴格控制的,python程序未經許可去遠程訪問,就會報錯,

莫名其妙,肯定又要改什么參數,煩!————————————— 於是我放棄了,我放棄用cgi來運行python。

我只是想用python處理下數據然后獲得結果,寫一個API然后用JS調用不就好了,而且,cgi這東西好像已經被淘汰了,現在沒幾個公司還在用這個。
但還是記錄一下我在cgi的努力過程,畢竟花了我一個晚上還有今天下午一個小時≡(▔﹏▔)≡ 要懂得變通嘛,不能鑽牛角尖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM