请教一个 Java 获得 Python 执行结果的方法

2017-04-13 23:43:45 +08:00
 backfrw
前段时间交了毕业设计的开题报告,本来打算就 java 写个网站,老师说不行,太简单,改报告。。。
最后是 python 写爬虫,通过关键字爬取信息,存数据库,用 java 的 SSM 框架写个后台,从数据库获得关键字相关的信息展示在页面上,之前想的是关键字通过 java 存数据库, python 从数据库拿关键字爬网站,算是通过开题报告了

等真正开始写才觉得不对,主要流程上 java 怎么在 python 结束后运行,就把自己想死机了。。。。

长期潜水看 V2EX 学姿势,大佬们能不能讲讲怎么开发比较容易啊?
目前是 python 小白,正在一边看教程一边写
7241 次点击
所在节点    Java
42 条回复
woostundy
2017-04-14 10:14:43 +08:00
拿 redis 做个消息队列呗。
vjnjc
2017-04-14 10:19:33 +08:00
简单的来说楼主是缺乏出发程序的时机,那这样就简单了。
python 操作好了通过 http 访问 java 后台接口,反之亦然
ipwx
2017-04-14 10:22:29 +08:00
restful api
bk201
2017-04-14 10:25:17 +08:00
我都觉得根本不需要数据库
debuggerx
2017-04-14 10:51:38 +08:00
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
* Created by debuggerx on 17-2-14.
*/
public class ImageLocalizationUtil {
public static String ImageLocalization(String uploadpath , String content) {
String res = "";
try {
String[] cmd = {"python", uploadpath + "/ImageLocalization.py" ,uploadpath + "/xiumi/", content};
Process process = Runtime.getRuntime().exec(cmd);
String line = null;

InputStream is = process.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

while ((line = reader.readLine()) != null) {
System.out.println(line);
res += line;
}
//process.waitFor();
is.close();
reader.close();
process.destroy();

} catch (Exception e) {
e.printStackTrace();
}
return res;
}
}

我这个因为就在一台服务器上跑的,所以 java 调用 python 并阻塞就拉倒了。。
或者直接用 linux 的 pipe 管道做通讯,直接重定向输入输出就很随意了。
不同机器上最简单的就是 python 执行结束后 urllib 调一下 java 写的 web 接口了事
backfrw
2017-04-14 11:08:15 +08:00
@Lpl @NoAnyLove @wwqgtxx @ipwx 谢谢大佬,感觉学到了新东西
backfrw
2017-04-14 11:12:10 +08:00
@Cbdy @arischow @hand515 @vjnjc 谢谢啦,回头试试
backfrw
2017-04-14 11:14:51 +08:00
@zwl2012 因为老师没给过
backfrw
2017-04-14 11:15:15 +08:00
@debuggerx 谢谢大佬,学到了
RFC2109
2017-04-14 11:18:31 +08:00
从场景上来说,应该用消息队列。用 redis 的 pub sub 就可以了。
linsist
2017-04-14 11:18:36 +08:00
Java 拿到关键词后在数据库中新建记录,同时推送任务到消息队列,然后轮询数据库的记录状态;
Python 常驻监听消息队列,拿到任务,解决,然后回写数据库的记录状态。不过这种方式毕设还行,到了生产估计就不够用了吧。

感觉楼主只是没绕过那个弯,两者之间怎么形成一个工作流
backfrw
2017-04-14 11:24:42 +08:00
@linsist 谢谢啦,看了这么多建议,已经转过来啦,感谢各位回答的大佬
backfrw
2017-04-14 11:26:38 +08:00
@RFC2109 感谢建议,谢谢啦
wyntergreg
2017-04-14 12:36:10 +08:00
消息队列
简单来说, redis 的 list 就足够了
哪那么多事啊还 rpc ,怎么不上套 hadoop 啊
denonw
2017-04-14 15:39:59 +08:00
mq 吧
Ixizi
2017-04-14 16:23:49 +08:00
楼上正解。
Jackeriss
2017-04-14 20:06:04 +08:00
@zwl2012 不是应该说 Python 也可以写网站吗?做个毕设分分钟的事。
wc951
2017-04-14 23:05:37 +08:00
杀鸡用什么牛刀,写个 http 接口顶天了
woshixiaohao1982
2017-04-15 13:50:01 +08:00
序列化 mq 队列搞起
breezeFP
2017-05-04 15:38:30 +08:00
直接用 java 去爬不好吗,当年我就是用 java 的一个框架 webcollect (好像是这个名字)做的,挺简单

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/354732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX