簡體   English   中英

在嵌入式Tomcat上從Spring-Boot Web應用程序運行Python腳本

[英]Running a Python script from Spring-Boot Web Application on embedded Tomcat

我正在嘗試制作一個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"

我挖了很多互聯網,找到了解決方案。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM