从Python执行.jar

时间:2011-04-03 20:59:36

标签: java python os.system

我正在尝试构建一个非常简单的python脚本来自动缩小/组合一些css / js资产。

我不确定如何正确处理缩小步骤。我使用yui-compressor,通常直接从命令行调用jar。

假设构建脚本与rhino js.jaryui-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()时)

我猜它与路径有关,也许在调用os.system()时,java没有正确解析......有什么想法吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

我有一个类似的情况,当我想要一个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为我运行我的命令,以便我得到通常的路径,引用等)

答案 1 :(得分:0)

当命令正确执行时,os.system应该返回0。 0是成功的标准返回代码。

从命令行运行时是否打印输出?

答案 2 :(得分:-1)

为什么要在Python中执行此操作?对于像这样的任务,尤其是Java,最好使用Apache Ant。在xml中编写命令,然后为您运行ant。