В качестве последующих мер в мой предыдущий вопрос, который был решен быстро, я бегу код Python ниже WinPython:функция Python subprocess.check_output возвращает CalledProcessError: команда возвращает ненулевое состояние выхода
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
Апач Maven исполнимый, кажется, не работать. Я предполагаю, что аргументы передаются в программу некорректно. Я не мог найти никаких опечаток в аргументах или logtoolDir, но, может быть, я чего-то не хватает? Есть идеи?
UPDATE: mvn exec: exec не был запущен, так как check_output
каким-то образом не смог получить доступ к переменным среды Windows. Я добавил путь к processEnv
и теперь 'mvn','--version'
в check_output
args подтверждает, что Maven работает. Код все еще не работает, но я думаю, что это, вероятно, проблема с тем, как я определил каталоги.
Cheers.
IIRC, если вы используете 'shell = True', обычно вы передаете args как одну строку. – mgilson
(также, никогда не используйте 'shell = True' по какой-либо причине.) – geoffspear
@Wooble - это утверждение может быть _bit_ strong :-). Бывают моменты, когда это удобно. Однако любой код, который использует его, должен _clearly_ документировать, что входные данные должны быть на 100% надежными. – mgilson