struts2小小專案 經驗總結(3) 呼叫python
阿新 • • 發佈:2018-12-10
- 程式呢是這樣的,java呼叫python,把需要爬的網址當作引數傳進去,然後python爬取內容,然後壓縮,java把這個壓縮包下載到客戶端。
- 遇到個麻煩,就是同學的爬蟲程式是使用scrapy框架的,需要進入入口程式的資料夾下才可以執行,所以我使用了bat批處理檔案實現(不安全,但是水平有限,只能這麼幹)。
- 然後在使用struts提供的下載功能將打包好的程式下載到客戶端。
- 實現下載功能,就是把action中返回值的型別設定為流,具體的配置如下
<action name="downloadAction" class="action.Actions.DownloadPics"> <result type="stream"> <!--指定返回型別為流--> <param name="inputName">Target</param> <!--指定是哪個方法執行之後的返回值--> <param name="contentDisposition">filename="this is you cat.zip"</param> <!--指定檔案的名字--> </result> </action>
public InputStream getTarget() throws Exception { File file = new File("/Cat'sEye/downloadFiles/zipFile.zip"); CallPython callPython = new CallPython(); callPython.execute(getTargetUrl()); InputStream in = new FileInputStream(file); return in; }
int execute(String url) { // 先把上次下載的內容清理乾淨 File file = new File("/Cat'sEye/downloadFiles/111"); if(file.exists()){ delDir(file); } // 使用bat檔案進入python所在的位置,然後實行python程式 try { FileWriter writer = new FileWriter("runPython.bat"); writer.write("@echo off"); writer.write("\r\n "); writer.write("cd /"); writer.write("\r\n"); writer.write("cd Cat'sEye\\Cat'sEyePython"); writer.write("\r\n"); writer.write("python dmzj_start.py" + " " + url); writer.write("\r\n "); writer.write("exit"); writer.write("\r\n "); writer.write("@echo on "); writer.close(); Process process = Runtime.getRuntime().exec("cmd /c start /wait runPython.bat"); process.waitFor(); return 0; } catch (Exception e1) { e1.printStackTrace(); } return 1; }
- 實現下載功能,就是把action中返回值的型別設定為流,具體的配置如下