大家好,又见面了,我是你们的朋友全栈君。
最近在做编译原理课设,准备用Java写个GUI整合一下,因为自己的LL1文法使用python写的,所以需要Java来实现运行python代码,网上给出了主要三种方法,但是使用Jython的方法有局限性且不太方便,于是我将采用最简洁的方法
Runtime.getRuntime()运行
python代码,下面给出代码
Process proc;
try {
/* 注意:
这里这种方式和cmd中使用python 文件名的命令,调用python程序相同
建议先使用cmd方式确认代码能够正常运行,因为如果代码在pycharm下编写执行,
可能在cmd方式下会出现缺少包的情况
*/
proc = Runtime.getRuntime().exec(“python D:\LL1.py”);// 执行py文件
proc.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
上面给出的是一个简单的执行python文件的方法,
exec(“python pyFile路径”)
除此之外,还能进行传递参数等等,这里转载一下:
http://blog.csdn.net/it_xiao_bai/article/details/79074988
先写一个示例python代码:
import sys
def func(a,b):
return (a b)
if __name__ == ‘__main__’:
a = []
for i in range(1, len(sys.argv)):
a.append((int(sys.argv[i])))
print(func(a[0],a[1]))
其中sys.argv用于获取参数url1,url2等。而sys.argv[0]代表python程序名,所以列表从1开始读取参数。
以上代码实现一个两个数做加法的程序,下面看看在java中怎么传递函数参数,代码如下:
int a = 18;
int b = 23;
try {
String[] args = new String[] { “python”, “D:\demo2.py”, String.valueOf(a), String.valueOf(b) };
Process proc = Runtime.getRuntime().exec(args);// 执行py文件
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
proc.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
其中args是String[] { “python”,path,url1,url2 }; ,path是python程序所在的路径,url1是参数1,url2是参数2,以此类推。
最后结果为:41
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175343.html原文链接:https://javaforall.cn