Eclipse中java代码调用python脚本时提示错误Exception in thread "main" Traceback (most recent call last):,请问如何解决?

非著名魔兽解说 发布于 2017/03/02 13:22
阅读 1K+
收藏 0

我Eclipse配置了python和jython了,Eclipse中java代码调用python脚本时提示错误Exception in thread "main" Traceback (most recent call last):

java代码如下:

package test;

import org.python.util.PythonInterpreter;

public class ThirdJavaScript {
	public static void main(String args[]) {
		PythonInterpreter interpreter = new PythonInterpreter();
		interpreter.execfile("E:\\python\\python_demo\\see_xiaohua.py");
	}
}

原有python脚本代码如下:

# coding:utf-8
#!/usr/bin/python
import urllib2#与下面脚本对比没有被注释
import re#与下面脚本对比没有被注释
from bs4 import BeautifulSoup#与下面脚本对比没有被注释
number =0  #定义序号变量
page = raw_input("Please input page:")
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request('http://www.qiushibaike.com/hot/page/'+str(page)+'/?s=4915651',headers = headers)
response = urllib2.urlopen(request)
html = response.read()   #获取页面源码
soup = BeautifulSoup(html,"html.parser")
items = soup.find_all('div',attrs={"class":"content"}) #搜索div标签并且同时含有class=content内容

for item in items:
    number +=1
    pattern = re.compile('<span>(.*?)</span>',re.S)
    lists = re.findall(pattern,str(item))
    for list in lists:
        print 'NO',number,':',list.decode('utf-8'),'\n'
    
print "End..."

运行时,控制台出现如下错误,请问如何修改?

 

加载中
0
Ginray
Ginray

应该是有包依赖问题 ,我是直接用process调用Python文件的,不知道对你是不是适用。

0
非著名魔兽解说
非著名魔兽解说

引用来自“Ginray”的评论

应该是有包依赖问题 ,我是直接用process调用Python文件的,不知道对你是不是适用。

您说的process调用Python我在网上试了一个,不好用。您是否有实例代码?

0
Ginray
Ginray

引用来自“Ginray”的评论

应该是有包依赖问题 ,我是直接用process调用Python文件的,不知道对你是不是适用。

引用来自“非著名魔兽解说”的评论

您说的process调用Python我在网上试了一个,不好用。您是否有实例代码?

这是我以前写的测试,不知道能否帮到你。  http://blog.csdn.net/ginray/article/details/53471796

0
gitlab_sam
gitlab_sam
/**
 * 命令执行器
 * @param cmd
 * @return
 * @throws IOException
 */
private static String execCmd(String cmd) throws IOException{
    LOGGER.info("execCmd: cmd ---> " + cmd);
    Runtime runtime = Runtime.getRuntime();
    //执行命令
    Process process = runtime.exec(cmd);
    //接收命令执行的输出信息
    BufferedReader infoReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String info = "";
    StringBuilder sb = new StringBuilder();
    while((info = infoReader.readLine()) != null){
        LOGGER.info(info);
        sb.append(info);
    }
    //接收命令执行的错误信息
    BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    String error = "";
    while((error = errorReader.readLine()) != null){
        LOGGER.error(error);
        sb.append(error);
    }
    LOGGER.info("execCmd end.");
    return sb.toString();
}

关于直接用process调用Python文件,以上是我之前写的一个方法,异常啥的都没怎么处理,希望能对楼主有用,调用示例:execCmd(“python E:\\python\\python_demo\\see_xiaohua.py”),红色部分与你直接在dos窗口调用py文件一样,也可接收参数

0
非著名魔兽解说
非著名魔兽解说

引用来自“gitlab_sam”的评论

关于直接用process调用Python文件,以上是我之前写的一个方法,异常啥的都没怎么处理,希望能对楼主有用,调用示例:execCmd(“python E:\\python\\python_demo\\see_xiaohua.py”),红色部分与你直接在dos窗口调用py文件一样,也可接收参数

您好!我按照您的改了我的代码,但是控制台没有任何输出,debug的时候发现main函数没有调用方法execCmd,请问哪里不对呢?

我的代码如下:

package test;

import java.io.*;

public class ThirdJavaScript {
	public static void main(String args[]) {

		// PythonInterpreter interpreter = new PythonInterpreter();
		// interpreter.execfile("E:\\python\\python_demo\\inputpy.py");
		// interpreter.execfile("E:\\python\\python_demo\\see_xiaohua.py");
		try {
			execCmd("python E:\\python\\python_demo\\see_xiaohua.py");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static String execCmd(String cmd) throws IOException {
		Runtime runtime = Runtime.getRuntime();
		// 执行命令
		Process process = runtime.exec(cmd);
		// 接收命令执行的输出信息
		BufferedReader infoReader = new BufferedReader(new InputStreamReader(
				process.getInputStream()));
		String info = "";
		StringBuilder sb = new StringBuilder();
		while ((info = infoReader.readLine()) != null) {
			sb.append(info);
		}
		// 接收命令执行的错误信息
		BufferedReader errorReader = new BufferedReader(new InputStreamReader(
				process.getErrorStream()));
		String error = "";
		while ((error = errorReader.readLine()) != null) {
			sb.append(error);
		}
		return sb.toString();
	}
}

控制台下图这个红色的部分一直在,感觉是被阻塞了。

0
gitlab_sam
gitlab_sam

引用来自“非著名魔兽解说”的评论

引用来自“gitlab_sam”的评论

关于直接用process调用Python文件,以上是我之前写的一个方法,异常啥的都没怎么处理,希望能对楼主有用,调用示例:execCmd(“python E:\\python\\python_demo\\see_xiaohua.py”),红色部分与你直接在dos窗口调用py文件一样,也可接收参数

您好!我按照您的改了我的代码,但是控制台没有任何输出,debug的时候发现main函数没有调用方法execCmd,请问哪里不对呢?

我的代码如下:

package test;

import java.io.*;

public class ThirdJavaScript {
	public static void main(String args[]) {

		// PythonInterpreter interpreter = new PythonInterpreter();
		// interpreter.execfile("E:\\python\\python_demo\\inputpy.py");
		// interpreter.execfile("E:\\python\\python_demo\\see_xiaohua.py");
		try {
			execCmd("python E:\\python\\python_demo\\see_xiaohua.py");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static String execCmd(String cmd) throws IOException {
		Runtime runtime = Runtime.getRuntime();
		// 执行命令
		Process process = runtime.exec(cmd);
		// 接收命令执行的输出信息
		BufferedReader infoReader = new BufferedReader(new InputStreamReader(
				process.getInputStream()));
		String info = "";
		StringBuilder sb = new StringBuilder();
		while ((info = infoReader.readLine()) != null) {
			sb.append(info);
		}
		// 接收命令执行的错误信息
		BufferedReader errorReader = new BufferedReader(new InputStreamReader(
				process.getErrorStream()));
		String error = "";
		while ((error = errorReader.readLine()) != null) {
			sb.append(error);
		}
		return sb.toString();
	}
}

控制台下图这个红色的部分一直在,感觉是被阻塞了。

这个是捕获脚本执行时的输出信息,你的脚本可能没有输出信息,但脚本执行完应该就会有返回,你在27行前面增加一行System.out.println(info),34行前面增加一行System.out.println(error),打印一下,看是不是执行脚本的时候卡住,导致脚本一直在执行,没有返回

0
非著名魔兽解说
非著名魔兽解说

 

引用来自“gitlab_sam”的评论

这个是捕获脚本执行时的输出信息,你的脚本可能没有输出信息,但脚本执行完应该就会有返回,你在27行前面增加一行System.out.println(info),34行前面增加一行System.out.println(error),打印一下,看是不是执行脚本的时候卡住,导致脚本一直在执行,没有返回

加了那2句后还是没有输出,正常用python自带的IDLE执行时是有输出的,但是在java代码里就出现那个不执行的情况:

正常IDLE的输出:

0
gitlab_sam
gitlab_sam

引用来自“非著名魔兽解说”的评论

 

引用来自“gitlab_sam”的评论

这个是捕获脚本执行时的输出信息,你的脚本可能没有输出信息,但脚本执行完应该就会有返回,你在27行前面增加一行System.out.println(info),34行前面增加一行System.out.println(error),打印一下,看是不是执行脚本的时候卡住,导致脚本一直在执行,没有返回

加了那2句后还是没有输出,正常用python自带的IDLE执行时是有输出的,但是在java代码里就出现那个不执行的情况:

正常IDLE的输出:

我运行你的python脚本报错,但跟你说的现象不太一样,你再看下是不是哪里有问题吧,你用的语法似乎是python2

返回顶部
顶部