无法从java代码启动python脚本

无法从java代码启动python脚本,java,python,Java,Python,我有java代码来调用python脚本 Java private void visualizeData() { try{ Runtime.getRuntime().exec(“python pyScripts/visualize.py”) } catch (IOException e){ e.printStackTrace(); } } 这是我的visualize.py代码: 可视化.py from mpl_toolkits.mplot3

我有java代码来调用python脚本

Java

private void visualizeData() {
    try{
        Runtime.getRuntime().exec(“python pyScripts/visualize.py”)
    } catch (IOException e){
        e.printStackTrace();
    }
}
这是我的visualize.py代码:

可视化.py

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt

f = open(“ecoli_data_transformed.txt”,”r”)

fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)

for line in f:
    (a, b, c) = line.split(“\t”)
    a = float(a)
    b = float(b)
    c = float(c)    

    ax.scatter(a,b,c)

ax.setxlabel(‘PCA1’)
ax.setylabel(‘PCA2’)
ax.setzlabel(‘PCA3’)

plt.show()
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt
import numpy as np

np.random.seed(19680801)

def randrange(n, min, vmcx):
    return (vmax - vein)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)

n = 100

for c, m, slow, high in [(‘r’, ‘o’, -50, -25), (‘b’, ‘^’, -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel(‘X Label’)
ax.set_ylabel(‘Y Label’)
ax.set_zlabel(‘Z Label’)

plt.show()
但它没有绘制数据

如果我从java代码中调用test.py脚本(test.py与visualize.py位于同一目录中),它可以工作:

test.py

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt

f = open(“ecoli_data_transformed.txt”,”r”)

fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)

for line in f:
    (a, b, c) = line.split(“\t”)
    a = float(a)
    b = float(b)
    c = float(c)    

    ax.scatter(a,b,c)

ax.setxlabel(‘PCA1’)
ax.setylabel(‘PCA2’)
ax.setzlabel(‘PCA3’)

plt.show()
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt
import numpy as np

np.random.seed(19680801)

def randrange(n, min, vmcx):
    return (vmax - vein)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)

n = 100

for c, m, slow, high in [(‘r’, ‘o’, -50, -25), (‘b’, ‘^’, -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel(‘X Label’)
ax.set_ylabel(‘Y Label’)
ax.set_zlabel(‘Z Label’)

plt.show()
有什么问题吗


*注意:通过“python visualize.py”从控制台调用visualize.py脚本非常好。

在python脚本中传递给
open()
命令的相对路径可能是问题所在

Java程序所在的目录与Python程序所在的目录不同。当它启动python脚本时,当前路径仍然是Java程序的路径

这意味着Python无法找到您试图打开的文件的相对路径,
ecoli\u data\u transformed.txt

解决方法是包括.txt文件的完整路径:

更好的解决方案是按程序确定:


请在问题中粘贴代码,而不是附加图片链接。我尝试过,但格式不好。对不起,我是个新手。若要格式化为代码,您应该在编辑器中将选项卡替换为空格,将代码粘贴到此处,选择它并使用可用的代码格式工具(基本上每行代码添加4个空格),然后会发生什么?有例外吗?没有,没有。代码完成,但从未绘制脚本的图形。不是test.py的情况,那里一切都很好。哦,天哪,是的,谢谢!