1. 程式人生 > >struts2小小專案 經驗總結(3) 呼叫python

struts2小小專案 經驗總結(3) 呼叫python

  1.  程式呢是這樣的,java呼叫python,把需要爬的網址當作引數傳進去,然後python爬取內容,然後壓縮,java把這個壓縮包下載到客戶端。
  2. 遇到個麻煩,就是同學的爬蟲程式是使用scrapy框架的,需要進入入口程式的資料夾下才可以執行,所以我使用了bat批處理檔案實現(不安全,但是水平有限,只能這麼幹)。
  3. 然後在使用struts提供的下載功能將打包好的程式下載到客戶端。
    1. 實現下載功能,就是把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;
          }