从Python执行.jar文件

3 投票
3 回答
11125 浏览
提问于 2025-04-16 15:00

我正在尝试编写一个非常简单的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 个回答

-1

为什么你会想在Python中做这个呢?对于这样的任务,尤其是用Java的时候,使用Apache Ant会更好。你可以用xml写命令,然后Ant会帮你执行这些命令。

0

os.system这个命令在执行成功的时候应该返回0。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")

在我的情况下,我希望所有命令都能执行,不管有没有错误,这就是我不让程序在出错时抛出异常的原因。此外,我希望任何信息都直接打印到终端,所以我把标准输出和错误输出设置为None,这样它们就不会发送到我的Python程序。如果你对错误和信息的处理有不同的需求,可以看看http://docs.python.org/library/subprocess.html的文档,了解如何调整这些行为。

(我让bash为我运行命令,这样我就能得到我平常的路径、引号等等)

撰写回答