| | |
| | | import com.se.simu.domain.po.DataPo; |
| | | import com.se.simu.helper.StringHelper; |
| | | import com.se.simu.helper.WebHelper; |
| | | import com.sun.xml.internal.messaging.saaj.util.TeeInputStream; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import com.se.simu.Rainfall; |
| | |
| | | public String callExe(DataPo data) throws Exception { |
| | | String cmd = String.format("%s %d %s", config.getSolverBat(), WebHelper.getCpuCores(), data.getInPath() + ".json"); |
| | | |
| | | return exec(cmd); |
| | | //return exec(cmd); |
| | | return execCmdLine(cmd); |
| | | } |
| | | |
| | | private String exec(String cmd) throws Exception { |
| | |
| | | StringBuilder sb = new StringBuilder(); |
| | | while ((line = nr.readLine()) != null) { |
| | | sb.append(line); |
| | | log.info(line); |
| | | } |
| | | |
| | | String errorLine; |
| | | while ((errorLine = er.readLine()) != null) { |
| | | log.warn(errorLine); |
| | | log.error(errorLine); |
| | | } |
| | | |
| | | // 等待程序执行结束并输出状态 |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 执行命令行,并等待命令执行完毕 |
| | | * |
| | | * @param cmd 命令,window记得要使用cmd /c开头,如cmd /c ipconfig |
| | | * @throws IOException |
| | | * @throws InterruptedException |
| | | */ |
| | | private String execCmdLine(String cmd) throws IOException, InterruptedException { |
| | | Process process = Runtime.getRuntime().exec(cmd); |
| | | |
| | | new Thread(() -> { |
| | | InputStreamReader ir = null; |
| | | BufferedReader br = null; |
| | | try { |
| | | ir = new InputStreamReader(process.getErrorStream(), "GBK"); |
| | | br = new BufferedReader(ir); |
| | | |
| | | String line; |
| | | while ((line = br.readLine()) != null) { |
| | | log.error(line); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | if (null != br) br.close(); |
| | | if (null != ir) ir.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }).start(); |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | //new Thread(() -> { |
| | | InputStreamReader ir = null; |
| | | BufferedReader br = null; |
| | | try { |
| | | ir = new InputStreamReader(process.getInputStream(), "GBK"); |
| | | br = new BufferedReader(ir); |
| | | |
| | | String line; |
| | | while ((line = br.readLine()) != null) { |
| | | log.info(line); |
| | | sb.append(line); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | if (null != br) br.close(); |
| | | if (null != ir) ir.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | //}).start(); |
| | | |
| | | process.waitFor(); |
| | | process.destroy(); |
| | | |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public void copeWaterFiles() { |
| | | // |
| | | } |