首页 > 解决方案 > 使用文件参数通过 Java 运行 python 脚本

问题描述

我有一个标准的 Maven 项目,我想运行meTypeset脚本。该脚本需要 3 个参数,其中第二个是文件,第三个是创建为输出的文件夹。

这是脚本在 cmd 中运行的方式:

meTypeset.py docx <input> <output_folder> [options]

这就是我尝试在 Java 中运行它的方式:

public static void main(String args[]) {
    String[] cmd = {
            "python",
            "resources\\pyscripts\\meTypeset.py",
            "docx",
            "resources\\exampledocs\\example_journal.docx",
            "resources\\output"
    };
    try {
        Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

什么也没有发生,没有错误,但也没有结果

标签: javapythonfile

解决方案


与 python 不同,Java 可能需要一些帮助。我猜你是在 Windows 上运行的吗?

您调用Runtime.exec()方法。该方法返回一个Process实例,您可以在它的文档中阅读

默认情况下,创建的进程没有自己的终端或控制台。它的所有标准I/O(即stdin、stdout、stderr)操作都将被重定向到父进程,在那里可以通过使用getOutputStream()、getInputStream() 和getErrorStream() 方法获得的流来访问它们。父进程使用这些流向进程提供输入并从进程中获取输出。因为一些原生平台只为标准输入输出流提供有限的缓冲区大小,不能及时写入进程的输入流或读取进程的输出流,可能会导致进程阻塞,甚至死锁。

因此,您的进程很可能是由操作系统启动的,但由于 I/O 限制而被阻止。通过阅读 STDOUT 和 STDERR 流直到您的流程完成来解决这个问题。在https://www.baeldung.com/run-shell-command-in-java可以看到一种好的编程模型


推荐阅读