一尘不染

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

spring-boot

我正在尝试制作一个Web应用程序,该应用程序在Spring-boot上使用HTML
Form接收来自用户的输入(在嵌入式Tomcat上运行);我需要将此输入作为命令行参数传递给位于硬盘上某个地方的Python脚本。

这是我的控制器,可从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.sweet老师要求我在Spring-
Boot上制作网络应用。
由于该应用程序在Tomcat上运行,因此好像无法像在控制台上一样直接执行Py脚本。有人可以建议一种方法吗?非常感谢您的帮助。

注意:Spring-Boot Project和Python Script都可以独立运行而没有问题。

我遇到的问题是,代码仅在控制台上打印变量“ 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"

阅读 443

收藏
2020-05-30

共1个答案

一尘不染

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

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

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