java - 将参数从 Java 传递到 Python 时出错

标签 java python getopt

我正在从 Java 调用一些 Python 模块。该模块使用 numpy,因此我使用 Runtime.getRuntime().exec() 来调用 Python。在Java中我正在做这样的事情:

File python = new File("/usr/bin/python2.7");
File script = new File("/opt/my_custom_script.py");
String[] cmdArray = new String[] { python.toString(), script.toString(),
    "-i infile.txt", "-o outfile.txt" };
Process p = Runtime.getRuntime().exec(cmdArray);
p.waitFor();
if (p.exitValue() != 0) {
    throw new Exception(scriptName + " failed with exit code " + p.exitValue());
}

到目前为止,我在 Python 中已经得到了:

def main(argv):
    try:
        opts, args = getopt.getopt(argv, "i:o:")
    except getopt.GetoptError as err:
        print(err)
        sys.exit(128) # made up number so I know when this happens

    sys.exit(0)

if __name__ == "__main__":
    main(sys.argv[1:])

每次运行这个程序时,我都会不断收到我编造的错误号,并且我的 Python 脚本不再运行。直接调用 Python(在 bash 中)不会给我带来任何问题。

我的断线在哪里?我该如何解决/调试这个问题?

最佳答案

您的问题是您正在向脚本传递两个选项,而不是 getopt 期望的四个选项。也就是说,-i infile.txt 被视为一个选项,而不是像 getopt 期望的那样,被视为 -iinfile.txt 这两个选项,同样的事情也发生在 -o outfile.txt 上。您可以通过替换以下行来解决此问题:

String[] cmdArray = new String[] { python.toString(), script.toString(), "-i infile.txt", "-o outfile.txt" };

用这一行:

String[] cmdArray = new String[] { python.toString(), script.toString(), "-i", "infile.txt", "-o", "outfile.txt" };

请注意,现在 -iinfile.txt 现在是单独的数组元素,-o-outfile 也是如此。 txt.

关于java - 将参数从 Java 传递到 Python 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18114735/

相关文章:

java 。防止按钮变大

python - 颜色空间映射 YCbCr 到 RGB

c - Getopt 订购,有吗?

java - 无法使用 BubbleTextView

java - System.out .write() 执行但不打印

javascript - 编写此函数的更有效方法? ( Django 、 Ajax )

python - 在 Ubuntu 上安装 psycopg2

c++ - 我可以在 C++ 中使用 getopt 来读取带参数和不带参数的字符吗?

c - 我如何使用 getOpt 来确定 C 中是否没有给出任何选项?

java - 为什么 Web 应用程序的 Solr 搜索引擎在搜索 ‘Java Spring’ 时会返回 ‘Spring Fertility’ 结果?如何解决这个问题?