【问题标题】:python subprocess call ubuntu 14.04python子进程调用ubuntu 14.04
【发布时间】:2015-12-10 17:36:25
【问题描述】:

我正在尝试在 ubuntu 14.04 (http://alt.qcri.org/tools/discourse-parser/) 中运行 alt 话语解析器树

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

文件“/usr/lib/python2.7/subprocess.py”,第 540 行,在 check_call 中 引发 CalledProcessError(retcode, cmd) subprocess.CalledProcessError: 命令'['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']' 返回非零退出状态 1

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

【问题讨论】:

  • 这不是 python 问题。您的外部 java 应用程序失败,python 会告诉您。

标签: java python-2.7 nlp ubuntu-14.04


【解决方案1】:

正如@MarkB 在他的评论中提到的那样,这并不是真正的 Python 错误消息,而是 Python 只是解释了它运行什么命令来执行 Java 程序,以及它的返回值,以及它在执行过程中出了什么问题。

此消息表明 Java 程序返回值 1。通常,程序以非零状态退出意味着出现问题。您需要查看此应用程序的值 1 的含义(如果有的话)。

逐条解释错误信息:

文件“/usr/lib/python2.7/subprocess.py”,第 540 行,在 check_call 中引发 CalledProcessError(retcode, cmd) 子进程。

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

CalledProcessError: 命令 '['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,这意味着被调用的进程没有返回零,它向您显示了用于启动外部 [Java] 应用程序的命令。命令就是java,选项&参数如下(按顺序)

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

最后是这一行

返回非零退出状态 1

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

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

【讨论】:

  • 感谢您的快速回复..我纠正了这一点..但现在我遇到了另一个涉及 perl 子进程的类似问题..请帮我解决这个问题.. File "/home/prasenjit/Desktop/ Shared/nlp/Discourse_Parser_Dist/TopicFeatures.py”,第 31 行,computeLexChains subprocess.check_output(['perl', lex_ch, chfile_in, chfile_out]) 文件“/usr/lib/python2.7/subprocess.py”,第 573 行, 在 check_output raise CalledProcessError(retcode, cmd, output=output) subprocess.CalledProcessError: Command '['perl', 'lexChain.pl', 'tmp.ch_in', 'tmp.chn']' 返回非零退出状态2
  • @Prasenjitdey 很高兴。如果它回答了您的原始问题,请接受此答案。 SO 规则规定应单独发布单独的问题,但本质上这是完全相同的问题。 python 端的一切都很好,但是 Perl 程序出错导致返回值为 2。对于这个问题,我无法为您提供尽可能详细的帮助,因为我不熟悉 Perl。您应该找出 2 的返回错误代表什么才能深入了解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2014-12-10
  • 2015-02-07
相关资源
最近更新 更多