从Python执行.jar文件
我正在尝试编写一个非常简单的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 个回答
为什么你会想在Python中做这个呢?对于这样的任务,尤其是用Java的时候,使用Apache Ant会更好。你可以用xml写命令,然后Ant会帮你执行这些命令。
os.system这个命令在执行成功的时候应该返回0。0是表示成功的标准返回码。
在命令行中运行的时候,它会输出内容吗?
我有一个类似的情况,我想让一个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为我运行命令,这样我就能得到我平常的路径、引号等等)