Я пытаюсь написать сценарии Python для выполнения некоторых команд Maven автоматически.Как заставить Maven работать с подпроцессом Python?
Следующий код Python не работает:
import subprocess
args = ['mvn', '-version']
process = subprocess.Popen(args, stdout=subprocess.PIPE)
в результате следующей ошибки:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
process = subprocess.Popen(args, stdout=subprocess.PIPE)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
В качестве следующего шага, я поставляю подпроцесс полного пути к mvn
двоичным:
import subprocess
args = ['/usr/local/Cellar/maven/3.2.3/libexec/bin/mvn', '-version']
process = subprocess.Popen(args, stderr=subprocess.PIPE)
out, err = process.communicate()
Эта команда получает немного дальше, но печать err
раскрывает следующую жалобу:
Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/libexec/java_home/bin/java
В качестве проверки вменяемости, я проверить на собственном терминале, JAVA_HOME
правильно установить:
$ mvn -version
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T16:58:10-04:00)
Maven home: /usr/local/Cellar/maven/3.2.3/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.5", arch: "x86_64", family: "mac"
Я также возможность запускать mvn
без хлопот на терминале.
Мой вопрос: почему подпроцесс не может работать mvn
, и как я могу его получить?
Хм ... Кажется, что окружающая среда должна быть унаследован от вызывающего абонента. Можете ли вы проверить значение 'os.environ ['JAVA_HOME']'? – mgilson
Кроме того, я не уверен, что это имеет значение, но по какой-то причине JAVA_HOME, подразумеваемая в ошибке, и дом Java из вашей «проверки работоспособности», по-видимому, являются разными путями ... – mgilson
@mgilson 'os.environ [' JAVA_HOME '] 'не определено, но, явно определяя его в Python, теперь работает вызов подпроцесса' mvn'. – user3898238