运行Python代码:subprocess.check_output(),得到错误:[Winerror 2]

时间:2015-11-19 13:27:21

标签: python maven

我正在运行一些Python代码,用于在文件上运行Apache Maven程序并生成输出:

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/jre',
          'mvn': 'C:/Program Files/apache-maven-3.3.3/bin/'}
#processEnv = "C:/Program Files/Java/jdk1.8.0_66"
args = '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],
                             env = processEnv,
                             cwd = logtoolDir)

然而,它给了我这个错误:

File "C:/Users/Mohammad/Google Drive/PhD/Spyder workspace/production-consumption/test.py", line 25, in <module>
cwd = logtoolDir)

File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\subprocess.py", line 607, in check_output
with Popen(*popenargs, stdout=PIPE, **kwargs) as process:

File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\subprocess.py", line 859, in __init__
restore_signals, start_new_session)

File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\subprocess.py", line 1112, in _execute_child
startupinfo)

FileNotFoundError: [WinError 2] The system cannot find the file specified

我已经调查了一些事情,并且我已将其缩小到我所期望的_winapi.CreateProcess无法找到 Apache Maven安装(并运行) mvn 命令)。安装已经在我的路径env变量中(该行通过CMD运行得很好)。我可能也错误地定义了这些目录,但我没有在那里找到问题......有人可以就如何解决这个问题提出建议吗?

干杯。

1 个答案:

答案 0 :(得分:0)

您可以尝试将“shell = True”附加到传递给子流程的参数,如下所示:

subprocess.check_output(['mvn', ' exec:exec',
                         ' -Dexec.args=' + args],
                         env = processEnv,
                         cwd = logtoolDir, shell = True)

虽然正如here所述,如果调用的内容可以由外部来源确定,这可能会带来安全风险,但我无法判断您给出的代码是否属于这种情况