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

时间:2013-08-07 22:14:10

标签: 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中)没有问题。

我的断开连接在哪里?我该如何进行故障排除/调试呢?

1 个答案:

答案 0 :(得分: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" };

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