我正在尝试使用Java编译Python代码。 Python代码打开一个csv文件并将数据保存到其他csv文件。
import os
from stat import*
import csv
data = []
with open('Example.csv') as f:
reader = csv.reader(f, delimiter = ',')
for row in reader:
data.append(row)
f = open("Clearprint.csv","w")
f.truncate()
f.close()
with open('Clearprint.csv','w',newline='') as fp:
a = csv.writer(fp,delimiter = ',')
a.writerows(data)
Python代码可以正常工作,但是当我尝试通过Java编译它时,没有任何事情发生。
class test1{
public static void main(String[] args) throws IOException {
String pythonScriptPath = "C:/Masters/Python/helloPython.py";
String[] cmd = new String[2];
cmd[0] = "C:/Python33/python.exe";
cmd[1] = pythonScriptPath;
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmd);
BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while((line = bfr.readLine()) != null) {
System.out.println(line);
}
}
}
如果Python代码只有一个打印命令,一切正常,所以它可能与我使用csv有关。请注意,我不需要从Python返回Java或将其发送到Python。我只想让Java启动Python代码,让Python做其他事情。
谢谢
答案 0 :(得分:1)
这里的术语有点不对,这使问题混乱。您正试图通过从java调用python解释器来运行一个python脚本。
据推测,python子进程会抛出一些错误(就像它找不到文件一样)并且java进程没有告诉你那个错误是什么。这里的解决方案是实际捕获java中的错误,并将其打印出来:
BufferedReader err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
String line = "";
while((line = err.readLine()) != null) {
System.err.println(line);
}
那就是说,我同意在jython中这样做可能会更好 - 或者只是在java中重写python部分 - 我知道,java中的IO和字符串处理是一种痛苦,但不如多语言项目可以是:)