Python函数subprocess.check_output返回CalledProcessError:command返回非零退出状态

时间:2015-11-19 15:53:07

标签: python maven

作为我上一个快速解决的问题的后续内容,我在WinPython中运行下面的Python代码:

import os, subprocess
os.chdir("C:/Users/Mohammad/Google Drive/PhD/Spyder workspace/production-consumption/logtool-examples/")
logtoolDir="C:/Users/Mohammad/Google Drive/PhD/Spyder workspace/production-consumption/logtool-examples/ "
#processEnv = {'JAVA_HOME': 'C:/Program Files/Java/jdk1.8.0_66/'}
args = r'"org.powertac.logtool.example.ProductionConsumption D:/PowerTAC/Logs/2015/log/powertac-sim-1.state testrunoutput.data"'
subprocess.check_output(['mvn', 'exec:exec', '-Dexec.args=' + args],
                             shell = True, cwd = logtoolDir)

并收到以下错误:

CalledProcessError: Command '['mvn', 'exec:exec', '-Dexec.args="org.powertac.logtool.example.ProductionConsumption D:/PowerTAC/Logs/2015/log/powertac-sim-1.state testrunoutput.data"']' returned non-zero exit status 1 

Apache Maven可执行文件似乎无法运行。我的猜测是,参数被错误地传递给程序。我在 args logtoolDir 参数中找不到任何拼写错误,但也许我在那里遗漏了一些东西?有什么想法吗?

更新: mvn exec:exec没有运行,因为check_output以某种方式无法访问Windows的环境变量。我将路径变量添加到processEnv,现在'mvn','--version' args中的check_output确认了Maven运行。代码仍然没有运行,但我想这可能是我如何定义目录的问题。

干杯。

1 个答案:

答案 0 :(得分:0)

问题解决了。基本上:a)subprocess.check_output无法读取Windows的环境变量(例如PATH,JAVA_HOME),因此我必须重新定义我在processEnv中使用的那个并在函数的参数中传递它。另外,b) args 变量定义不正确。我需要删除一组引号,并使用r生成它。

更正的代码:

logtoolDir='C:/Users/Mohammad/Google Drive/PhD/Spyder workspace/production-consumption/logtool-examples/'
processEnv = {'JAVA_HOME': 'C:/Program Files/Java/jdk1.8.0_66/jre/',
          'Path' : 'C:/Program Files/apache-maven-3.3.3/bin/'}
args = r"org.powertac.logtool.example.ProductionConsumption D:/PowerTAC/Logs/2015/log/powertac-sim-1.state testrunoutput2.data"
print(subprocess.check_output(['mvn', 'exec:exec', '-Dexec.args='+ args],
                           shell = True, env = processEnv, cwd = logtoolDir))

不幸的是我找不到使用shell = True参数的方法,这可能不会成为问题,因为这只会用于数据分析。

干杯。