【问题标题】:Error passing arguments from Java to Python将参数从 Java 传递到 Python 时出错
【发布时间】:2013-08-07 22:14:10
【问题描述】:

我正在调用一些来自 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 中)没有问题。

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

【问题讨论】:

  • 什么是print(err)打印?
  • sys.edit(128) 行真的让我很震惊。我知道它是用于调试的,但传递变量确实是个好主意。幻数只会导致痛苦。
  • 我认为您的参数需要是数组中的单独元素:例如。 "-i infile.txt" -> "-i", "infile.txt"
  • 从代码 (Sting[]) 中的拼写错误判断,这不是您正在运行的实际代码。请张贴。
  • @kindall 他还忘了分号:new Sting[] { python.toString(), script.toString(), "-i infile.txt", "-o outfile.txt" }

标签: java python getopt


【解决方案1】:

您的问题是您传递了两个选项两个脚本,而不是 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 也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多