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

0 投票
1 回答
1372 浏览
提问于 2025-05-10 15:29

我正在运行一些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命令)。安装路径已经在我的环境变量中(在CMD中运行是没问题的)。也有可能是我不小心把目录定义错了,但我找不到问题出在哪里……有没有人能给我一些建议,帮我解决这个问题?

谢谢!

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

1

你可以试着在传给子进程的参数中加上 "shell = True",像这样:

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

不过正如这里所说的,如果调用的内容是由外部来源决定的,这可能会带来安全风险,但从你给的代码中我无法判断是否存在这种情况。

撰写回答