python 子进程调用 ubuntu 14.04

python subprocess call ubuntu 14.04

我正在尝试 运行 在 ubuntu 14.04 (http://alt.qcri.org/tools/discourse-parser/)

中替换话语解析器树

一切都编译成功,但在运行期间显示以下错误。

File "/usr/lib/python2.7/subprocess.py", line 540, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['java', '-classpath', 'Tools/grmm/class:Tools/grmm/lib/mallet-deps.jar:Tools/grmm/lib/grmm-deps.jar', 'edu.umass.cs.mallet.grmm.learning.AcrfForTestJoty', '--testing', 'tmp_sen.feat', '--model-file', 'dcrf.sen.gz']' returned non-zero exit status 1

我只想知道这个错误是什么意思,以及错误中显示的命令和参数。所有必需的 jar 文件都存在于它们各自的位置。

正如@MarkB 在他的评论中提到的,这并不是真正的 Python 错误消息,而是 Python 简单地解释它 运行 执行什么命令 Java 程序及其 return 值,并且在执行过程中出现了错误。

此消息显示 Java 程序 returned 的值为 1。通常,以非零状态退出的程序表示出现错误。您需要查看此应用程序的值 1 的含义(如果有的话)。

逐条解释错误信息:

File "/usr/lib/python2.7/subprocess.py", line 540, in check_call raise CalledProcessError(retcode, cmd) subprocess.

Python 运行 进程 'subprocess' 并在第 540 行抛出错误(这无关紧要,因为它只是内部 Python 的东西)。这是被调用的 Java 进程抛出的错误, 而不是 内部 Python 的东西。

CalledProcessError: Command '['java', '-classpath', 'Tools/grmm/class:Tools/grmm/lib/mallet-deps.jar:Tools/grmm/lib/grmm-deps.jar', 'edu.umass.cs.mallet.grmm.learning.AcrfForTestJoty', '--testing', 'tmp_sen.feat', '--model-file', 'dcrf.sen.gz']

抛出的错误类型是 CalledProcessError,这意味着调用的进程没有 return 零,它向您显示用于启动外部 [Java] 应用程序的命令.命令很简单java,选项&参数如下(按顺序)

  • '-classpath', 'Tools/grmm/class:Tools/grmm/lib/mallet-deps.jar:Tools/grmm/lib/grmm-deps.jar' 使用以冒号 (:) 分隔的 3 个路径覆盖此 JVM 会话的默认 classpath 环境变量。
  • edu.umass.cs.mallet.grmm.learning.AcrfForTestJoty 这是 class 包含一个 main 方法,将被调用
  • --testing, 'tmp_sen.feat' 是传递给 Java 程序中的 main 方法的自定义参数
  • '--model-file', 'dcrf.sen.gz' 是 Java 程序
  • 中传递给 main 方法的另一个自定义参数

最后,这一行

returned non-zero exit status 1

是Java程序的return值。它提醒您它没有以 0(成功)退出,而是遇到了错误代码 1 的某种问题。如果 Java 程序以不同的错误代码退出,这可能意味着什么,或者这可能只是意味着它因一般性问题而退出,但它可能是任何问题。

长话短说:您需要确保将正确的值传递给 Java 程序。如果这是您自己的 Java 程序,那么我建议对其进行调试。如果不是,您应该直接 运行 它(不带 Python)并使用相同的参数:--testing tmp_sen.feat & --model-file dcrf.sen.gz 以查明这些参数本身是否是问题所在。希望通过这种方式,您可以更清楚地了解 Java 程序中出现的问题。