我正在尝试制作一个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 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"
我挖了很多互联网,找到了解决方案。
可以使用以下命令执行此操作:
String fetching = "python " + "c:\\Fetch.py \"" + songDetails + "\""; String[] commandToExecute = new String[]{"cmd.exe", "/c", fetching}; Runtime.getRuntime().exec(commandToExecute);