3

我正在尝试构建一个非常简单的 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()

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

谢谢你的帮助

4

3 回答 3

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 为我运行我的命令,以便我得到我通常的路径、引用等)

于 2011-04-03T21:38:27.707 回答
0

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

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

于 2011-04-03T21:56:41.630 回答
-1

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

于 2011-04-03T22:02:25.363 回答