0

我正在从 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 中)没有问题。

我的断线在哪里?我将如何进行故障排除/调试?

4

1 回答 1

2

您的问题是您传递了两个选项两个脚本,而不是 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" };

注意 now-iinfile.txtnow 是单独的数组元素,-o-outfile.txt.

于 2013-08-07T22:50:48.187 回答