运行Python代码:subprocess.check_output(),错误:[Winerror 2]
我正在运行一些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)
不过正如这里所说的,如果调用的内容是由外部来源决定的,这可能会带来安全风险,但从你给的代码中我无法判断是否存在这种情况。