在嵌入式Tomcat上从Spring-Boot Web应用程序运行Python脚本

时间:2018-03-05 07:35:38

标签: java python spring spring-boot

我正在尝试创建一个Web应用程序,在Spring-boot上使用HTML表单从用户那里获取输入(在嵌入式Tomcat上运行);我需要将此输入传递给位于硬盘上某处的Python脚本作为命令行arg。

这是我的控制器从HTML表单中获取数据(从表单获取数据工作正常。)

@Controller
public class PortalController {
    @RequestMapping(value="")
    public String hello(){
        return "portal/welcome";
    }
    @RequestMapping(value="",method=RequestMethod.POST)
    public String addAObjectForm(@RequestParam String val) throws IOException {
        String cmd = "python Fetch.py \""+val+"\"";
        System.out.println(cmd);
        Runtime.getRuntime().exec(cmd);
        return "redirect:/";
    }
}

变量' cmd'最后存储此值:python Fetch.py "Command-line-arg-from-html"

Python代码正在抓取网页。 代码太大,无法移植到Java。我的v。甜蜜老师要我在Spring-Boot上制作网络应用程序。由于应用程序在Tomcat上运行,看起来我不能直接执行Py脚本好像是在控制台上。有人可以建议一种方法吗?任何帮助都非常感谢。

注意:Spring-Boot项目和Python脚本都是独立运行的。

我遇到的问题是,代码只打印变量' cmd'在控制台上继续。数据库中没有反映任何更改(应该由Py脚本完成),它表示脚本没有执行。 这是控制台窗口:

2018-03-03 05:44:47.733  INFO 10752 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-03-03 05:44:47.771  INFO 10752 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-03-03 05:44:47.771  INFO 10752 --- [  restartedMain] org.OpenLyrics.Portal.PortalApplication  : Started PortalApplication in 3.161 seconds (JVM running for 7.414)
2018-03-03 05:44:55.737  INFO 10752 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-03-03 05:44:55.738  INFO 10752 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-03-03 05:44:55.765  INFO 10752 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 26 ms
python Fetch.py "Argument 1"
python Fetch.py "Argument 2"
python Fetch.py "Argument 3"

1 个答案:

答案 0 :(得分:2)

我挖了很多互联网并找到了解决方案。

可以使用以下命令执行此操作:

String fetching = "python " + "c:\\Fetch.py \"" + songDetails + "\"";
String[] commandToExecute = new String[]{"cmd.exe", "/c", fetching};
Runtime.getRuntime().exec(commandToExecute);