【问题标题】:Executing python from java从java执行python
【发布时间】:2014-06-28 12:51:38
【问题描述】:

我知道有很多类似的问题,但都没有解决我的问题...

所以,我想使用 ProcessBuilder 从 java 执行 python 脚本...

这是我写的一个方法,但不起作用:

public void stemPosts(String scriptPath, String inputFile, String outputFile)
        throws IOException {
    ProcessBuilder process = new ProcessBuilder("python", scriptPath,
            inputFile, outputFile);
    process.start();
}

这里是方法调用(<user_path> 只是为了隐藏个人信息):

dataManager.stemPosts(
            "D:/<user_path>/stemmer/Croatian_stemmer.py",
            "D:/<user_path>/stemmer/posts.txt",
            "D:/<user_path>/stemmer/stemmedPosts.txt");

第一个参数是脚本,第二个参数是第一个脚本参数(inputFile),第三个参数是第二个脚本参数(outputFile)...

在 cmd 中执行很简单:python Croatian_stemmer.py posts.txt stemmedPosts.txt 并且有效...

上面的代码只创建输出文件,但没有用数据填充它...

我尝试更改文件分隔符,但没有帮助...

【问题讨论】:

    标签: java python cmd


    【解决方案1】:

    对于初学者,我会通过重定向您在 here 中描述的 ProcessBuilder 输出来查看您从脚本执行中看到的输出。

    我的预感是它与 PYTHONPATH 或脚本中的错误有关,但看不到脚本或执行的输出是不可能知道的。

    【讨论】:

    • 所以,我按照你的建议重定向了它,但是没有打印出来;接下来,python路径设置正确;这是原始形式的脚本:pastebin.com/0PNQrjZx
    • 我想我明白了 - 您的 python 脚本假设 'rules.txt' 和 'transformations.txt' 在当前工作目录中。如果您从终端中的某处除了 词干分析器目录运行您的脚本,您可能会看到同样的问题。运行脚本时,JVM 工作目录不会在词干分析器中。让你的 python 脚本根据它自己的绝对路径和引用 rules.txt 和 transformations.txt - 请参阅stackoverflow.com/questions/247770/…
    • 还有一个注意事项,您也可以只使用 sys.argv[0]
    • 感谢您注意到当前的工作目录问题...这就是我错过的事情...因为我对 python 不太擅长(这不是我的脚本)所以我通过 Java 解决了问题将ProcessBuilder#directory 设置为工作目录,现在一切都像魅力一样工作:) 感谢您的帮助:)
    • 酷!乐意效劳。随意检查/投票我的答案。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多