2011-04-03 71 views
2

我正在尝试构建一个非常简单的python脚本来自动缩小/合并一些css/js资源。从Python执行.jar

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

假设构建脚本是在同一目录犀牛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()时没有正确解析...有什么想法?

感谢所有帮助

+0

在问题中包含您的Python代码。 – 2011-04-03 21:00:51

+0

这是上面使用os.system调用的确切命令: 'os.system(“java -cp js.jar -jar yuicompressor-2.4.4.jar -o css/foo.min.css css/foo.css” )' 脚本和罐子都住在同一个目录下,并从那个目录中调用 – magoo 2011-04-03 21:46:24

回答

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文档以了解如何调整发生的情况。

(我问庆典为我跑我的命令,让我得到我一贯的路径,报价等)

0

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

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

0

你为什么要在Python中做到这一点?对于这样的任务,尤其是Java,最好使用Apache Ant。用xml编写命令,然后运行ant。

+0

我认为关键是你已经有了一些Java中的代码,你需要将它与你正在编写的Python脚本集成。一般来说,你可以用Python编写Java中的任何东西,但这并不实用。 – user411279 2013-02-22 21:07:15