Выполнить .jar из Python - PullRequest
       19

Выполнить .jar из Python

2 голосов
/ 04 апреля 2011

Я пытаюсь создать очень простой скрипт на python для автоматизации минимизации / объединения некоторых ресурсов css / js.

Я не уверен, как правильно обработать шаг минификации.Я использую yui-compressor и обычно вызываю jar напрямую из командной строки.

Если предположить, что скрипт сборки находится в том же каталоге, что и rhino js.jar и yui-compressor.jar, я смогу сжать CSSФайл / js выглядит так:

java -cp js.jar -jar yuicompressor-2.4.4.jar -o css/foo.min.css css/foo.css

Вызов этого из терминала работает нормально, но в файле сборки Python это не происходит, например, os.system("...") Возвращаемое состояние выхода - 0, и нетвыходные данные возвращаются из команды (например, при использовании os.popen() вместо os.system())

Я предполагаю, что это как-то связано с путями, возможно, с Java не разрешается должным образом при вызове os.system()… есть идеи?

Спасибо за любую помощь

Ответы [ 3 ]

3 голосов
/ 04 апреля 2011

У меня есть несколько похожий случай, когда я хочу, чтобы программа на Python создала некоторые команды, а затем запустила их, а результат был передан пользователю, который запустил скрипт.Код, который я использую:

import subprocess
def run(cmd):
   call = ["/bin/bash", "-c", cmd]
   ret = subprocess.call(call, stdout=None, stderr=None)
   if ret > 0:
      print "Warning - result was %d" % ret

run("javac foo.java")
run("javac bar.java")

В моем случае я хочу, чтобы все команды выполнялись с ошибкой или нет, поэтому у меня не возникает исключение при ошибке.Кроме того, я хочу, чтобы любые сообщения печатались прямо в терминале, поэтому у меня есть stdout и stderr, равные None, что заставляет их не идти в мою программу на python.Если ваши потребности в ошибках и сообщениях немного отличаются, посмотрите документацию http://docs.python.org/library/subprocess.html о том, как настроить то, что происходит.

(я прошу bash запустить для меня мою команду, чтобы яполучить мой обычный путь, цитирование и т. д.)

0 голосов
/ 04 апреля 2011

Почему вы хотите сделать это на Python?Для таких задач, особенно Java, лучше использовать Apache Ant .Пишите команды в xml, а затем запускается ant для вас.

0 голосов
/ 04 апреля 2011

os.system должна возвращать 0, когда команда выполняется правильно.0 - стандартный код возврата для успеха.

Распечатывает ли вывод при запуске из командной строки?

...